每个单词的计数

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));
    }