我是 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/