Java中如何将字符串拆分数字(含小数)与普通字符并存入数组?
解决方案:拆分字符串为数字(含小数)与普通字符
问题分析
你需要将字符串拆分为完整数字片段(包括带逗号/点的小数)和普通字符片段,但原正则表达式的拆分逻辑错误——它会在单个数字前触发拆分,导致数字被拆分为单个字符。以下提供两种可靠实现方式:
方法1:正则匹配(推荐,逻辑更直观)
直接匹配所有符合要求的数字和非数字片段,避免拆分逻辑的歧义。
正则规则说明
\d+(?:[.,]\d+)?|[^0-9]+
\d+(?:[.,]\d+)?:匹配整数(如600)或带逗号/点的小数(如1,54、.300),(?:...)为非捕获组,避免生成无用分组[^0-9]+:匹配连续的非数字字符(如bacon、g)
代码实现
import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; class HelloWorld { public static void main(String[] args) { String[] Words = {"bacon", "1,54g", "eggs", "600g", "jalapeno.300g"}; Pattern pattern = Pattern.compile("\\d+(?:[.,]\\d+)?|[^0-9]+"); for (String word : Words) { Matcher matcher = pattern.matcher(word); List<String> parts = new ArrayList<>(); while (matcher.find()) { String part = matcher.group(); if (!part.isEmpty()) { parts.add(part); } } System.out.println(word); System.out.println(Arrays.toString(parts.toArray(new String[0]))); } } }
输出结果
bacon [bacon] 1,54g [1,54, g] eggs [eggs] 600g [600, g] jalapeno.300g [jalapeno, .300, g]
方法2:调整Split正则(适合坚持用Split的场景)
通过匹配数字与非数字的边界实现拆分,确保数字片段的完整性。
正则规则说明
(?<=\\d)(?=[^0-9])|(?<=[^0-9])(?=(?:\\d+[.,]\\d+|\\d+|\\.\\d+))
(?<=\\d)(?=[^0-9]):在数字结尾、非数字开头的位置拆分(如600g→600和g之间)(?<=[^0-9])(?=(?:\\d+[.,]\\d+|\\d+|\\.\\d+)):在非数字结尾、完整数字开头的位置拆分(如jalapeno.300g→jalapeno和.300之间)
代码实现
import java.util.Arrays; class HelloWorld { public static void main(String[] args) { String[] Words = {"bacon", "1,54g", "eggs", "600g", "jalapeno.300g"}; String splitRegex = "(?<=\\d)(?=[^0-9])|(?<=[^0-9])(?=(?:\\d+[.,]\\d+|\\d+|\\.\\d+))"; for (String word : Words) { String[] splitWord = word.split(splitRegex); System.out.println(word); System.out.println(Arrays.toString(splitWord)); } } }
输出结果
bacon [bacon] 1,54g [1,54, g] eggs [eggs] 600g [600, g] jalapeno.300g [jalapeno, .300, g]
原代码问题总结
原正则(?=\\d+[.,]\\d+|\\d+)会在每个单个数字的前触发拆分(如600会在6、0、0前分别拆分),导致数字被拆分为单个字符。而你尝试的[0-9]+[.,][0-9]+|[0-9]+是匹配数字的规则,不能直接用于split(split会将匹配内容作为分隔符,导致丢失数字部分)。
内容的提问来源于stack exchange,提问作者Oliveinparis
相关产品推荐
相关产品推荐

