Java使用正则表达式分割字符串:拆分1.48 kb得到1.4,如何获取期望结果
问题根因
- 正则中的
.未转义:Java正则里.是通配符,会匹配任意单个字符,你没有转义的情况下,不会识别为小数点,而是匹配任意字符。 - 拆分逻辑错误:你当前的
split写法会匹配到8 kb这段内容,切割后只保留前面的1.4,自然不符合需求。
解决方案
如果你的需求是将原字符串的数值保留1位小数后拼接单位得到1.4 kb,可以用更简单的空格拆分+数值格式化的方式实现:
String a = "1.48 kb"; // 按空格拆分数字和单位 String[] parts = a.split("\\s+"); // 数字保留1位小数后拼接单位 String result = String.format("%.1f %s", Double.parseDouble(parts[0]), parts[1]); System.out.println(result);
如果需要更通用的适配(比如数字和单位之间没有空格、存在多段空格的场景),可以用正则分组捕获的方式实现:
import java.util.regex.Matcher; import java.util.regex.Pattern; public class StringSplitDemo { public static void main(String[] args) { String a = "1.48 kb"; // 分组1匹配数值,分组2匹配单位 Pattern pattern = Pattern.compile("(\\d+\\.\\d+)\\s*([a-zA-Z]+)"); Matcher matcher = pattern.matcher(a); if (matcher.find()) { double num = Double.parseDouble(matcher.group(1)); String unit = matcher.group(2); String result = String.format("%.1f %s", num, unit); System.out.println(result); } } }
两种方案运行后均输出你期望的1.4 kb。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

