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

Java:能否用substring()将指定字符串转为字符串数组?

解决方案:从"Java 2 5 22 8"提取数字字符串数组

当然可以用substring()实现这个需求,但说实话这不是最省心的做法——咱们分别聊聊两种思路:

一、用substring()手动截取的方式

这种方法需要你手动定位每个空格的位置,逐个截取数字部分,步骤有点繁琐:

import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        String input = "Java 2 5 22 8";
        // 先找到第一个空格,跳过开头的"Java"
        int startIdx = input.indexOf(" ") + 1;
        List<String> numList = new ArrayList<>();
        int nextSpaceIdx;
        
        // 循环查找后续的空格,截取中间的数字
        while ((nextSpaceIdx = input.indexOf(" ", startIdx)) != -1) {
            numList.add(input.substring(startIdx, nextSpaceIdx));
            startIdx = nextSpaceIdx + 1;
        }
        // 处理最后一个没有后续空格的数字
        numList.add(input.substring(startIdx));
        
        // 转成目标数组
        String[] resultArr = numList.toArray(new String[0]);
        // 输出看看:["2", "5", "22", "8"]
        for (String s : resultArr) {
            System.out.println(s);
        }
    }
}

这种方法的缺点很明显:需要手动处理空格的定位,还要考虑最后一个元素没有后续空格的边界情况,如果输入里出现多个连续空格或者其他空白字符,代码还要额外调整,维护起来很麻烦。

二、更推荐的方案:使用split()方法

Java的String类提供的split()方法专门用来处理字符串分割的场景,比substring()优雅太多:

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        String input = "Java 2 5 22 8";
        // 用\\s+分割:匹配任意数量的空白字符(空格、制表符等),鲁棒性更强
        String[] allParts = input.split("\\s+");
        // 跳过第一个元素"Java",提取后面的数字部分
        String[] resultArr = Arrays.copyOfRange(allParts, 1, allParts.length);
        
        // 输出结果:["2", "5", "22", "8"]
        System.out.println(Arrays.toString(resultArr));
    }
}

如果你的输入确定只有单个空格分隔,也可以直接用input.split(" "),但\\s+能兼容多个连续空格的情况,实用性更高。

总结一下:substring()确实能实现需求,但属于“能用但不好用”的类型;split()方法才是处理这类字符串分割问题的最优解,代码更简洁、易读,也更鲁棒。

内容的提问来源于stack exchange,提问作者undisp

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:08:05