我不知道我在做什么错。在Eclipse Luna甚至CMD上使用lambda表达式“无法解析条目”的ForEach()。
Map<Character, Integer> map = new HashMap<>();
while(sc.hasNextLine()) {
String str = sc.nextLine().replaceAll("\\s+", "").replaceAll("\\r\\n+", "");
char[] arr = str.toCharArray();
len += arr.length;
for(int i = 0; i < len; i++){
char ch = str.charAt(i);
if(map.containsKey(ch))
map.put(ch, map.get(ch) + 1);
else
map.put(ch, 1);
}
map.entrySet().stream()
.sorted(Map.Entry. <Character, Integer> comparingByValue().reversed())
.limit(5)
.forEach(entry -> System.out.printf("'%c' : %d%n", entry.getKey(), entry.getValue()));
答案 0 :(得分:0)
它会一直工作到我发现直到字符串中的5个字符,且空格后不超过5个字符,然后它会抛出异常
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 6
at java.lang.String.charAt(String.java:658)
at com.rmi.service.imp.MyServcieImp.main(MyServcieImp.java:29)
这是您的代码
`公共类MyServcieImp {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
int len=0;
Map<Character, Integer> map = new HashMap<>();
while(sc.hasNextLine()) {
String str = sc.nextLine().replaceAll("\\s+", "").replaceAll("\\r\\n+", "");
char[] arr = str.toCharArray();
len += arr.length;
for(int i = 0; i < len; i++){
char ch = str.charAt(i);
if(map.containsKey(ch))
map.put(ch, map.get(ch) + 1);
else
map.put(ch, 1);
}
map.entrySet().stream()
.sorted(Map.Entry. <Character, Integer> comparingByValue().reversed())
.limit(5)
.forEach(entry -> System.out.printf("'%c' : %d%n", entry.getKey(), entry.getValue()));
}
}
}`
你想要什么?打印超过5个或什么?
如果要根据需要打印所有字符串长度,只需替换
char ch = str.charAt(i);
和
map.entrySet().stream()
.sorted(Map.Entry. <Character, Integer> comparingByValue().reversed())
.limit(5)
.forEach(entry -> System.out.printf("'%c' : %d%n", entry.getKey(), entry.getValue()));
与
char ch = arr[i];
和
map.entrySet().stream()
.sorted(Map.Entry. <Character, Integer> comparingByValue().reversed())
.limit(map.size())
.forEach(entry -> System.out.printf("'%c' : %d%n", entry.getKey(), entry.getValue()));
并打印所需的内容。 :)