在日常开发中,字符串处理是最常见的任务之一。今天,我将分享一个实用的Java字符串处理案例:如何对句子中的单词进行内部排序,并按照特定规则重新组织整个句子。
我们需要实现一个Java程序,能够:
javaimport java.util.*;
import java.util.stream.Collectors;
public class StringProcessor {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
String result = processString(input);
System.out.println(result);
}
public static String processString(String input) {
String[] words = input.split(" ");
List<String> sortedWords = Arrays.stream(words)
.map(word -> {
char[] chars = word.toCharArray();
Arrays.sort(chars);
return new String(chars);
})
.collect(Collectors.toList());
Map<String, Integer> frequencyMap = new HashMap<>();
sortedWords.forEach(word ->
frequencyMap.put(word, frequencyMap.getOrDefault(word, 0) + 1));
List<String> uniqueWords = new ArrayList<>(frequencyMap.keySet());
uniqueWords.sort((w1, w2) -> {
int freqCompare = frequencyMap.get(w2).compareTo(frequencyMap.get(w1));
if (freqCompare != 0) return freqCompare;
int lengthCompare = Integer.compare(w1.length(), w2.length());
if (lengthCompare != 0) return lengthCompare;
return w1.compareTo(w2);
});
StringBuilder result = new StringBuilder();
for (String word : uniqueWords) {
int count = frequencyMap.get(word);
result.append((word + " ").repeat(count));
}
return result.toString().trim();
}
}
输入处理:
Scanner
类读取用户输入的一行字符串单词内部排序:
Arrays.sort(chars)
实现字符数组的升序排列频率统计:
HashMap
统计每个排序后单词的出现次数getOrDefault
方法简化计数逻辑多条件排序:
结果构建:
StringBuilder
高效拼接字符串repeat
方法根据频率重复单词trim
去除末尾多余空格Java Stream API:
Arrays.stream()
和map
操作简化集合处理collect(Collectors.toList())
将流转换为列表Lambda表达式:
字符串处理技巧:
toCharArray()
和new String(chars)
实现字符串与字符数组的转换String.join()
和StringBuilder
的合理选择集合框架:
HashMap
的高效统计ArrayList
的排序操作输入:
hello world hello java code code
处理过程:
单词内部排序后:
频率统计:
排序优先级:
最终输出:
cdeo cdeo ehllo ehllo aajv dlorw
大数据量处理:
Arrays.stream(words).parallel()
内存优化:
扩展性考虑:
这种字符串处理技术在以下场景中非常有用:
通过这个案例,我们学习了:
这种综合运用Java集合框架和流式API的解决方案,不仅代码简洁,而且性能高效,是日常开发中值得掌握的模式。
你对这样的字符串处理有什么想法或问题?欢迎在评论区留言讨论!