A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 专家 初级黑马   /  2015-11-30 18:40  /  6273 人查看  /  21 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

16黑马币
package 面试题;

import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;

public class Test5 {
    /*
     * 7、取出一个字符串中字母出现的次数。如:字符串:"abcdekka27qoq" ,输出格式为:a(2)b(1)k(2)...
     */

    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请输入一行字符串:");
        String line=sc.nextLine();
        char[] chs=line.toCharArray();
        TreeMap<Character, Integer> tm=new TreeMap<>();
        for (char c : chs) {
            tm.put(c, tm.get(c)==null?1:tm.get(c)+1);
        }
        StringBuilder sb=new StringBuilder();
        for(Map.Entry<Character, Integer> entry:tm.entrySet()){
            sb.append(entry.getKey()).append("(").append(entry.getValue()).append(")");
        }
        System.out.println(sb.toString());  
    }

}

21 个回复

正序浏览
apppend()方法就是再一个字符串的末尾后面追加()里面的东西
回复 使用道具 举报
tm已经记录了每一个字母出现的次数。最后一个循环就是遍历tm,并且生成结果字符串,那段话可以拆成这样:
Character key = entry.getKey();
Integer value = entry.getValue();
sb.append(key+"("+value+")");
回复 使用道具 举报
取出键和值。
回复 使用道具 举报
这道题,用到一个知识点map集合的put方法:添加键,返回值,map集合元素(key,value),用value统计个数最后得到是键值对形式的答案,遍历得到key和value,到第二句是为了拼接:得到这种格式a(2)b(1)k(2)
回复 使用道具 举报
啥意思?
回复 使用道具 举报
孜孜不倦 发表于 2015-12-2 14:19
append函数的意思及用法

功能说明:以可写方式打开文件。如果文件不存在,将会自动创建。使用该函数,将会 ...

姐们的黑马币可以是负分了
回复 使用道具 举报
它的意思就是输出a(2)b(1)k(2)...这样的格式,append是string中的追加功能,具体如下,因为括号过多,理解麻烦,可以剥离理解:
sb.append(entry.getKey()).append("(").append(entry.getValue()).append(")");相当于sb.append(entry.getKey())获取键的值,比如获取的是a,.append("(")就是在值后加个左括号(,接下来.append(entry.getValue())就是在(后添加键所对应的个数,比如a对应的个数,.append(")")就是接着添加一个右括号)
回复 使用道具 举报
字符串的拼接
回复 使用道具 举报
楼主倒数第二句改成这样应该能看懂了吧,对了,把最后一句删掉!倒数第二句改成如下:
System.out.print(entry.getKey())+"("+entry.getValue()+")");
把这个代码替换掉原有的代码,看看答案是否一样?
其实那个append是字符串缓冲区,append是添加的意思,相当于+号,有用选择我为答案哦
回复 使用道具 举报
append函数的意思及用法

功能说明:以可写方式打开文件。如果文件不存在,将会自动创建。使用该函数,将会覆盖文件中的所有内容。

  参考实例:

  var

    F: TextFile; // 声明文本文件类型变量

  begin

    AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接,后面可以使用F变量对文件进行操作。

    Rewrite(F); // 打开文件。如果文件不存在,将会在C盘中创建MyFile.txt文件。如果文件存在,将会覆盖MyFile.txt中的所有内容。

  end;

+++++++++++++++++
Append

功能说明:追加内容到文件中。文件必须要存在。

  参考实例:

  var

    S: String;

    F: TextFile;

  begin

    S := 'This is a book.';

  AssignFile(F, 'C:\MyFile.txt'); // 将C:\MyFile.txt文件与F变量建立连接,后面可以使用F变量对文件进行操作。

    Append(F); // 以追加的方式打开文件

    Writeln(F, S); // 将S变量中的内容追加到文本尾后。

    CloseFile(F); // 关闭文件

  end;
++++++++++++++++++++++++
//判断文件是否存在 FileExists
var
f: string;
begin
f := 'c:\temp\test.txt';
if not FileExists(f) then
begin
    //如果文件不存在
end;
end;
回复 使用道具 举报
sb.append(entry.getKey()).append("(").append(entry.getValue()).append(")");
把它拆开:
sb.append(entry.getKey())
sb.append("(");
sb.append(entry.getValue());
sb.append(")");
它只是使用了简写而已,没什么好看的,还是分开好,有条理些吧
回复 使用道具 举报
Jhon 中级黑马 2015-12-1 00:17:11
10#
好厉害的样子 看不懂
回复 使用道具 举报
将双列集合中的键和值取出来,用StringBuilder的append方法拼接为a(2)b(1)k(2)这种格式,也可以在 System.out.println打印时加“(”和“)”,不用使用StringBuilde
回复 使用道具 举报
等我学会了 我就告诉你
回复 使用道具 举报
字符串的拼接吧  可以去查看api文档
回复 使用道具 举报
sb.append(entry.getKey())-->将entry中的Key添加进sb,返回sb
.append("(")-->将"("添加进sb,返回sb
.append(entry.getValue())-->将entry中的value添加进sb,返回sb
.append(")");-->将")"添加进sb,返回sb
共四次添加进了sb-->Key(Value)
回复 使用道具 举报
我日给你发的代码没法看了!apppend追加的意思,是Stringbuffer,和Stringbuder里面的添加方法
回复 使用道具 举报
public class test4 {          // 取出一个字符串中字母出现的次数。如:字符串:"abcdekka27qoq" ,         // 输出格式为:a(2)b(1)k(2)...         public static void main(String[] args) {                 String str = "abcdekka27qoq";                 String regex = "\\d";                 String[] arr = str.split(regex);                 String st1 = "";                 for (int i = 0; i < arr.length; i++) {                         // System.out.print(arr[i]);                         st1 = st1 + arr[i];                 }                 String st2 = "";                 HashMap<Character, Integer> mp = new HashMap<>();                 char[] arr1 = st1.toCharArray();                 for (char c : arr1) {                         if (!mp.containsKey(c)) {                                 mp.put(c, 1);                         } else {                                 mp.put(c, mp.get(c) + 1);                         }                 }                 for (char key : mp.keySet()) {                         st2 = st2 + key + "(" + mp.get(key) + ")";                 }                 System.out.println(st2);         }  }
回复 使用道具 举报
public class test4 {          // 取出一个字符串中字母出现的次数。如:字符串:"abcdekka27qoq" ,         // 输出格式为:a(2)b(1)k(2)...         public static void main(String[] args) {                 String str = "abcdekka27qoq";                 String regex = "\\d";                 String[] arr = str.split(regex);                 String st1 = "";                 for (int i = 0; i < arr.length; i++) {                         // System.out.print(arr[i]);                         st1 = st1 + arr[i];                 }                 String st2 = "";                 HashMap<Character, Integer> mp = new HashMap<>();                 char[] arr1 = st1.toCharArray();                 for (char c : arr1) {                         if (!mp.containsKey(c)) {                                 mp.put(c, 1);                         } else {                                 mp.put(c, mp.get(c) + 1);                         }                 }                 for (char key : mp.keySet()) {                         st2 = st2 + key + "(" + mp.get(key) + ")";                 }                 System.out.println(st2);         }  }
回复 使用道具 举报
用得着这么麻烦吗,直接遍历字符串不行吗
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马