每个单词的计数
Count of each words
编写一个 java 程序来计算给定字符串中的单词总数,并按字母顺序打印每个单词的数量。
使用 Collections,我需要按字母顺序排序并打印给定字符串中的单词及其相应的计数,但有一些限制。
双引号内的单词(如"wrapped")最后排序打印。
每当我对列表进行排序时,首先对用双引号引起来的单词进行排序(基于 ACII Table),但我需要在双引号之前对所有 non-quoted 个单词进行排序。
请帮我找到这种排序的解决方案..
import java.util.*;
public class UniqueWord {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String inp = sc.nextLine();
inp = inp.toLowerCase().replaceAll("[^a-z'\" ]"," ");
int count=0;
char ch[] = new char[inp.length()];
for(int i=0; i<inp.length(); i++){
ch[i] = inp.charAt(i);
if(((i>0)&&(ch[i]!=' ')&&(ch[i-1]==' '))||((ch[0]!=' ')&&(i==0))){
count++;
}
}
System.out.println("Number of words "+count);
}
输入:
TreeSet 中的实现在某种意义上不是同步的,如果多个线程同时访问一个树集,并且至少有一个线程修改了该集,则它必须在外部同步。这通常是通过同步一些自然封装集合的 object 来实现的。如果不存在这样的 object,则应使用 Collections.synchronizedSortedSet 方法“包装”集合。
预期输出:
字数64
字数
一:3
访问:1
完成:1
和:1
在:1
是:2
作者:1
collections: 1
并发:1
封装:1
存在:1
外部:1
如果:2
实施:1
在:2
是:2
它:1
最少:1
方法:1
修改:1
多个:1
必须:1
自然:1
否:1
不是:1
object: 2
共:1
上: 1
一个:1
意义:1
设置:4
应该:1
一些:1
这样的:1
同步:2
同步排序集:1
同步:1
即:2
该: 6
这个:1
线程数:2
树:1
树集:1
通常:1
使用:1
“包裹”:1
编辑
得到解决方案....
查看此代码,根据需要进行更新。
如果提供了这些功能,请利用集合功能并避免编写代码。
尝试改进以下代码。
String input = "This is a \"long\" statement.SortedSet Collections.";
//split string based on your delimiters ( space, comma, dot )
String[] split = input.split("[ ,.]");
List<String> splitData = Arrays.asList(split);
//create the data map with num occurances
Map<String, Integer> dataToNumOccurances = new HashMap<>();
for (String aString : splitData) {
int occurrences = Collections.frequency(splitData, aString);
dataToNumOccurances.put(aString, occurrences);
}
//convert to list so that it could be custom sorted
List<String> sortedWords = new ArrayList<>(dataToNumOccurances.keySet());
sortedWords.sort(new Comparator<String>()
{
@Override
public int compare(String m1, String m2)
{
//apply the rule to push back double quoted string
if (m1.startsWith("\"")) {
return m2.compareToIgnoreCase(m1);
}
//apply case in-sensitive sort
return m1.compareToIgnoreCase(m2);
}
});
for (String word : sortedWords) {
System.out.println("Word: " + word + ", count: " + dataToNumOccurances.get(word));
}
编写一个 java 程序来计算给定字符串中的单词总数,并按字母顺序打印每个单词的数量。
使用 Collections,我需要按字母顺序排序并打印给定字符串中的单词及其相应的计数,但有一些限制。
双引号内的单词(如"wrapped")最后排序打印。
每当我对列表进行排序时,首先对用双引号引起来的单词进行排序(基于 ACII Table),但我需要在双引号之前对所有 non-quoted 个单词进行排序。
请帮我找到这种排序的解决方案..
import java.util.*;
public class UniqueWord {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String inp = sc.nextLine();
inp = inp.toLowerCase().replaceAll("[^a-z'\" ]"," ");
int count=0;
char ch[] = new char[inp.length()];
for(int i=0; i<inp.length(); i++){
ch[i] = inp.charAt(i);
if(((i>0)&&(ch[i]!=' ')&&(ch[i-1]==' '))||((ch[0]!=' ')&&(i==0))){
count++;
}
}
System.out.println("Number of words "+count);
}
输入:
TreeSet 中的实现在某种意义上不是同步的,如果多个线程同时访问一个树集,并且至少有一个线程修改了该集,则它必须在外部同步。这通常是通过同步一些自然封装集合的 object 来实现的。如果不存在这样的 object,则应使用 Collections.synchronizedSortedSet 方法“包装”集合。
预期输出:
字数64
字数
一:3
访问:1
完成:1
和:1
在:1
是:2
作者:1
collections: 1
并发:1
封装:1
存在:1
外部:1
如果:2
实施:1
在:2
是:2
它:1
最少:1
方法:1
修改:1
多个:1
必须:1
自然:1
否:1
不是:1
object: 2
共:1
上: 1
一个:1
意义:1
设置:4
应该:1
一些:1
这样的:1
同步:2
同步排序集:1
同步:1
即:2
该: 6
这个:1
线程数:2
树:1
树集:1
通常:1
使用:1
“包裹”:1
编辑 得到解决方案....
查看此代码,根据需要进行更新。 如果提供了这些功能,请利用集合功能并避免编写代码。 尝试改进以下代码。
String input = "This is a \"long\" statement.SortedSet Collections.";
//split string based on your delimiters ( space, comma, dot )
String[] split = input.split("[ ,.]");
List<String> splitData = Arrays.asList(split);
//create the data map with num occurances
Map<String, Integer> dataToNumOccurances = new HashMap<>();
for (String aString : splitData) {
int occurrences = Collections.frequency(splitData, aString);
dataToNumOccurances.put(aString, occurrences);
}
//convert to list so that it could be custom sorted
List<String> sortedWords = new ArrayList<>(dataToNumOccurances.keySet());
sortedWords.sort(new Comparator<String>()
{
@Override
public int compare(String m1, String m2)
{
//apply the rule to push back double quoted string
if (m1.startsWith("\"")) {
return m2.compareToIgnoreCase(m1);
}
//apply case in-sensitive sort
return m1.compareToIgnoreCase(m2);
}
});
for (String word : sortedWords) {
System.out.println("Word: " + word + ", count: " + dataToNumOccurances.get(word));
}