You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何利用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:56:32