Java按字母数量排序

问题描述 投票:1回答:3

我是Java新手。我的任务是在Java中按字母数量排序并使用StringBuilder而不使用Java集合。例如hhhheeeeelllo它应该像这个eeeeehhhhlllo并使用其他词。我有这个例如hhhhhhheeeeeelllllllllo控制台告诉我这个hhhhhheeeeeehlllllllllo。我知道在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");
     }
 }
java sorting
3个回答
0
投票

这是我如何做到的:

  • 首先,计算字符,例如使用Map
  • 接下来,按计数对Map进行排序。
  • 最后,简单地迭代已排序的条目,并将每个字符的“计数”时间附加到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();

0
投票

最简单和线性的方法(不使用任何库):

    public static void main (String [] args) {
    String input = "hhhheeeeelllo";// it should be like this eeeeehhhhlllo

    final char[] alphabet = new char[256]; // assumming ascii characters only

    for (int i = 0; i < input.length(); i++) {
        alphabet[input.charAt(i)]++;
    }

    StringBuilder sorted = new StringBuilder(input.length());

    for (int i = 0; i < alphabet.length; i++) {
        char ch = (char) i;
        for (int j = 0; j < alphabet[i]; j++) {
            sorted.append(ch);
        }
    }

    System.out.println(sorted.toString());
}

0
投票

如果你只需要在一个单词中写字:

String word = "hhhhhhheeeeeelllllllllo";
char[] chars = word.toCharArray();
Arrays.sort(chars); // sorted in ascending order
System.out.println(String.valueOf(chars));