是否有经测试的库方法可将指定字符串转为整数数组或List<Integer>?
有哪些成熟的库方法可以实现字符串转整数列表/数组?
当然有啦!Java生态里有不少经过广泛测试的库能帮你轻松搞定这个需求,不用自己从头写解析逻辑,代码还更简洁易读。下面给你推荐几个常用的方案:
Apache Commons Lang(最常用的工具库之一)
这个库的StringUtils和ArrayUtils组合起来能完美处理你的场景,而且对各种边缘情况(比如多余空格、空元素)的处理很贴心:
处理逗号分隔的字符串(如"1, 2, 3, 4")
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.ArrayUtils; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Example { public static void main(String[] args) { String commaSeparated = "1, 2, 3, 4"; // 转成List<Integer> List<Integer> integerList = Arrays.stream(StringUtils.split(commaSeparated, ",")) .map(String::trim) .map(Integer::parseInt) .collect(Collectors.toList()); // 转成Integer数组 Integer[] integerArray = ArrayUtils.toObject(Arrays.stream(StringUtils.split(commaSeparated, ",")) .map(String::trim) .mapToInt(Integer::parseInt) .toArray()); } }
处理空格分隔的字符串(如"1 2 3 4")
这里StringUtils.split()默认会按任意空白字符分割(包括多个连续空格、制表符等),还会自动忽略开头结尾的空白:
String spaceSeparated = "1 2 3 4"; // 多个空格也没问题 List<Integer> spaceList = Arrays.stream(StringUtils.split(spaceSeparated)) .map(Integer::parseInt) .collect(Collectors.toList());
Google Guava(功能更强大的工具库)
Guava的Splitter类是处理字符串分割的神器,语法更直观,还支持链式调用处理各种细节:
处理逗号分隔的字符串
import com.google.common.base.Splitter; import java.util.List; import java.util.stream.Collectors; public class GuavaExample { public static void main(String[] args) { String commaStr = "1, 2, 3, 4"; List<Integer> commaList = Splitter.on(',') .trimResults() // 自动去掉每个元素的前后空格 .omitEmptyStrings() // 忽略分割后产生的空字符串(比如开头/结尾有逗号的情况) .splitToList(commaStr) .stream() .map(Integer::parseInt) .collect(Collectors.toList()); } }
处理空格分隔的字符串
String spaceStr = "1 2 3 4"; List<Integer> spaceList = Splitter.on(CharMatcher.whitespace()) .trimResults() .omitEmptyStrings() .splitToList(spaceStr) .stream() .map(Integer::parseInt) .collect(Collectors.toList());
不用第三方库?JDK原生方案也能行
如果不想引入额外依赖,用JDK 8+的Stream结合正则分割也能实现,就是需要自己写正则规则:
// 处理逗号分隔 String commaStr = "1, 2, 3, 4"; List<Integer> nativeCommaList = Arrays.stream(commaStr.split("\\s*,\\s*")) // 匹配逗号前后的任意空格 .map(Integer::parseInt) .collect(Collectors.toList()); // 处理空格分隔 String spaceStr = "1 2 3 4"; List<Integer> nativeSpaceList = Arrays.stream(spaceStr.split("\\s+")) // 匹配一个或多个空白符 .map(Integer::parseInt) .collect(Collectors.toList());
总结
如果你追求代码的简洁性和容错性,优先选Apache Commons Lang或Guava——这两个都是业界广泛使用、经过充分测试的库,能帮你避免很多手写解析容易踩的坑。如果不想加依赖,原生的Stream+正则方案也能满足基础需求。
内容的提问来源于stack exchange,提问作者triplodrindl
相关产品推荐
相关产品推荐

