如何利用ArrayList处理字符串,实现单词统计与最长单词获取?
当然可以用ArrayList来实现这个需求!相比普通数组,ArrayList不需要预先定义大小,能更灵活地存储分割出来的单词,完全符合你的想法。下面我一步步给你拆解实现思路,再附上完整代码:
实现步骤
1. 获取完整输入字符串
用Scanner.nextLine()读取用户输入的整段字符串,这样能完整捕获包含空格分隔的所有单词,避免next()方法只读到第一个空格就停止的问题。
2. 手动遍历字符分割单词(满足索引访问需求)
如果你想通过索引逐个访问字符、手动统计单词数量,可以不用现成的split()方法,自己实现分割逻辑:
- 初始化一个
ArrayList<String>来动态存储单词,不用提前知道单词总数 - 用
StringBuilder临时拼接当前正在处理的单词字符(比直接用String拼接性能更好) - 遍历字符串的每个索引位置:遇到非空格字符就拼接到临时字符串;遇到空格且临时字符串不为空时,把临时字符串加入ArrayList并清空
- 遍历结束后,别忘了把最后一个单词加入ArrayList(如果输入末尾没有空格的话)
3. 遍历ArrayList找到最长单词
遍历ArrayList中的每个单词,记录长度最长的那个。如果有多个长度相同的最长单词,这里默认返回第一个,你也可以根据需求修改为返回全部。
完整代码示例
package senay; import java.util.ArrayList; import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入一段字符串:"); // 使用nextLine()获取完整的输入字符串 String input = scanner.nextLine(); scanner.close(); // 用ArrayList存储单词,无需预定义大小 ArrayList<String> words = new ArrayList<>(); StringBuilder currentWord = new StringBuilder(); // 手动遍历每个字符,通过索引访问分割单词 for (int i = 0; i < input.length(); i++) { char currentChar = input.charAt(i); if (currentChar != ' ') { currentWord.append(currentChar); } else { // 遇到空格且临时单词不为空时,加入ArrayList if (currentWord.length() > 0) { words.add(currentWord.toString()); currentWord.setLength(0); // 清空临时字符串 } } } // 处理最后一个单词(避免输入末尾无空格时丢失) if (currentWord.length() > 0) { words.add(currentWord.toString()); } // 输出统计的单词数量 System.out.println("字符串中的单词数量:" + words.size()); // 调用函数获取最长单词并输出 String longestWord = findLongestWord(words); System.out.println("最长单词是:" + longestWord); } // 定义函数,接收ArrayList<String>参数,返回最长单词 public static String findLongestWord(ArrayList<String> words) { if (words.isEmpty()) { return ""; // 处理空输入的边界情况 } String longest = words.get(0); for (String word : words) { if (word.length() > longest.length()) { longest = word; } } return longest; } }
额外说明
如果你觉得手动遍历字符太繁琐,也可以用split()快速分割单词,再转成ArrayList:
// 用正则表达式分割任意数量的空格 String[] wordArray = input.split("\\s+"); ArrayList<String> words = new ArrayList<>(Arrays.asList(wordArray));
这种方式更简洁,但手动遍历的逻辑更贴合你“通过索引访问字符、统计单词数量”的需求,你可以根据自己的场景选择。
内容的提问来源于stack exchange,提问作者senu
相关产品推荐
相关产品推荐

