Java按字母数量排序

标签 java sorting

我是 Java 新手。我的任务是使用 Java 按字母数量对单词进行排序,并使用 StringBuilder,而不使用 Java 集合。例如 hhhheeeeelllo 它应该像这样 eeeeehhhhlllo 并与其他单词一起使用。例如,我的 hhhhhhheeeeeelllllllo 控制台向我显示了这个 hhhhhhheeeeeehlllllllllo。我知道 C++ 中的样子。但我尝试用 Java 重写它,但没有成功。请帮我。

我知道我必须使用这个循环

for(int i = 1; i<s.length(); i++) {
   for(int j = s.length()-1; j>=i; j--) {
      if(word[j-1] > word[j]) {
        ....
     }
   }
}

这是我的代码:

 class StringBuilder {
     public void sorting_stringBuilder(String s) {
         int i,j;
         //String r="";
         //char c;
         char temp;
         java.lang.StringBuilder news = new java.lang.StringBuilder(s);

         for(i=1; i<s.length(); i++) {
            //c = news.charAt(i);

            for(j=s.length() - 1; j >= i; j--) {

               //c = news.charAt(i);
               if((int) news.charAt(j-1) > (int) news.charAt(j)) {
                   //c = news.charAt(j);
                   temp = news.charAt(i);
                   news.setCharAt(i, news.charAt(j-1));
                   news.setCharAt(j-1, temp);
               }
            }
           //r=r + c;
         }
         //System.out.println(r);
         System.out.println("s is = "+news);
     }
 }

 public class Laba3 {
     public static void main(String[] args) {
         StringBuilder sb = new StringBuilder();
         sb.sorting_stringBuilder("hhhhhhheeeeeelllllllllo");
     }
 }

最佳答案

我的做法是这样的:

  • 首先,计算字符数,例如使用 map
  • 接下来,按计数对 map 进行排序。
  • 最后,只需迭代排序后的条目,并将每个字符附加“count”次到 StringBuilder

大致内容(我只是在此处键入代码,因此可能无法编译):

// Input string
String s = ... ;
Map<Character, AtomicInteger> countOfCharacters = new HashMap<>();
char[] characters = s.toCharArray();
// Count the characters
for (char c : character) {
    countOfCharacters.computeIfAbsent(c, new AtomicInteger()).incrementAndGet();
}
// Get the char/count entries
Set<Map.Entry<Character, AtomicInteger>> countOfCharacterEntries =
    countOfCharacters.entrySet();
// Convert to array
Map.Entry<Character, AtomicInteger> countOfCharacterArray =
    new Map.Entry<Character, AtomicInteger>[countOfCharacterEntries.size()];
countOfCharacterEntries.toArray(countOfCharacterArray);
// Sort
Arrays.sort(countOfCharacterArray,
    Comparator.comparing(entry -> entry.getValue().get());
// Output to a StringBuilder
StringBuilder sb = new StringBuilder();
for (Map.Entry<Character, AtomicInteger> countOfCharacter: countOfCharacterArray) {
   char c = countOfCharacter.getKey().charValue();
   int count = countOfCharacter.getValue().get();
   for(int index = 0; index < count; index++) {
       sb.append(c);
   }
}
return sb.toString();

关于Java按字母数量排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49129967/

相关文章:

java - 我的代码将 kml 解析到 Google Earth 时出了什么问题?

Python使用其他列值创建具有最高值(%)的新列

c - ‘int’ 到 ‘int [(((sizetype)(((ssizetype)m) -1)) 1)]’ 赋值中的类型不兼容

java - 我是否需要在 xml 文件中显式使用 "autowire"来在 Spring Web 应用程序中 Autowiring

java - 合并sql表中的2列来搜索全名JPA

java - 是否jsp :setProperty escape esc-sequences?

java - 动画 Gif 帧到 BufferedImages 数组

c - 选择排序程序产生不正确的输出

python - 排序的关键参数是如何工作的?

java - java中如何对列表中的列表进行排序