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

Java中如何移除字符串非字母数字字符仅保留数字间小数点

字符串处理问题:仅保留数字间的小数分隔点

问题场景

现有包含小数点的字符串,需要移除所有非字母数字字符,仅保留数字之间作为小数分隔符的句点,同时合并清理多余空格。
测试用原始字符串:
String toPharse = "the. book - cost 7.55 dollars.";

原有问题代码

String newPharse =  toPharse.replaceAll("[^A-Za-zd.0-9 ]", " ").replaceAll("\\s+", " ");

原有代码运行输出:
"the. book cost 7.55 dollars."
该输出不符合预期,残留了两个非小数用途的普通句点:the后的句点、dollars后的句尾句点。

期望输出

"the book cost 7.55 dollars"

实现方案

分三步做正则替换即可得到目标结果:

  • 第一步:匹配所有非小数分隔符的普通句点,替换为空格。使用正则(?<!\\d)\\.|\\.(?!\\d),该正则会匹配两种不符合小数格式的句点:
    • 前侧没有相邻数字的句点
    • 后侧没有相邻数字的句点
  • 第二步:将剩余所有非字母、非数字、非空格的特殊字符全部替换为空格
  • 第三步:将连续的多个空格合并为单个空格,最后去除字符串首尾的空格

完整可运行代码:

public class StringCleanExample {
    public static void main(String[] args) {
        String toPharse = "the. book - cost 7.55 dollars.";
        // 移除非小数用途的普通句点
        String temp1 = toPharse.replaceAll("(?<!\\d)\\.|\\.(?!\\d)", " ");
        // 移除其余特殊字符
        String temp2 = temp1.replaceAll("[^A-Za-z0-9 ]", " ");
        // 合并空格、去除首尾空格
        String finalResult = temp2.replaceAll("\\s+", " ").trim();
        
        System.out.println(finalResult);
        // 控制台输出:the book cost 7.55 dollars
    }
}

注:原有代码的正则中存在笔误,[A-Za-zd.0-9 ]里a-z后多写了一个多余的d,修正后不会影响正常字母匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 04:06:20