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
相关产品推荐
相关产品推荐

