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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 12:45:04