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

Java从字符串提取正负浮点数遇阻:无法匹配负数

解决正则无法匹配负数浮点数的问题

你的问题出在正则表达式没有考虑数值可能带负号的情况!原正则[0-9]+[.][0-9]+只能匹配正数浮点数,自然抓不到-120.328997这种带负号的数值。

修正后的正则表达式

只需要在正则开头加上可选的负号匹配规则即可:

Pattern p = Pattern.compile("-?[0-9]+[.][0-9]+");

正则各部分解释

  • -?:表示负号是可选的(可以出现0次或1次),这样就能同时匹配正数和负数
  • [0-9]+:匹配一个或多个数字(对应浮点数的整数部分)
  • [.]:匹配小数点(也可以写成\.,效果一致)
  • [0-9]+:匹配小数点后的数字部分

完整测试代码

String logLat = "location: Location[gps 39.549497,-120.328997 hAcc=20 et=+44m40s745ms alt=0.0 vel=0.0 bear=0.0 vAcc=??? sAcc=??? bAcc=??? {Bundle[mParcelledData.dataSize=96]}]";
Pattern p = Pattern.compile("-?[0-9]+[.][0-9]+");
Matcher m = p.matcher(logLat);
while (m.find()) {
    Log.i("found is", m.group());
}

运行这段代码后,就能成功输出:

found is: 39.549497
found is: -120.328997

如果需要更严谨的匹配(比如处理可能的整数、或科学计数法),可以进一步调整正则,但针对你当前的需求,上面的写法已经完全够用啦。

内容的提问来源于stack exchange,提问作者arunachalam arun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 11:52:30