跳转至

Java正则表达式分隔,插入字符串

更新日期:2022-10-10
  • 2022-10-10: 创建文档

数字按千分位分割插入逗号

例如

12345 -> 12,345

1234567890 -> 1,234,567,890

给定一个整数字符串,从右往左,每3个数字加一个逗号

java代码中,我们使用方法 replaceAll

1
2
3
4
private static void extractTextFrom(String reg, String txt) {
    String res = txt.replaceAll(reg, ",");
    System.out.printf(Locale.CHINA, "%-10s 使用正则 %s -> %s%n", txt, reg, res);
}

插入1个逗号

java中使用的正则表达式为 (?=\\d{3}$)

注意转义符

插入1个逗号,输出结果
1
2
3
4
5
6
12         使用正则 (?=\d{3}$) -> 12
123        使用正则 (?=\d{3}$) -> ,123
1234       使用正则 (?=\d{3}$) -> 1,234
12345      使用正则 (?=\d{3}$) -> 12,345
123456     使用正则 (?=\d{3}$) -> 123,456
1234567890 使用正则 (?=\d{3}$) -> 1234567,890

插入多个逗号

java中使用的正则表达式为 (?=(\\d{3})+$)

相比之前的,每3个数字表达里,用小括号括起来了,后面多了个 +

插入多个逗号,输出结果
1
2
3
4
5
6
12         使用正则 (?=\d{3}$) -> 12
123        使用正则 (?=\d{3}$) -> ,123
1234       使用正则 (?=\d{3}$) -> 1,234
12345      使用正则 (?=\d{3}$) -> 12,345
123456     使用正则 (?=\d{3}$) -> 123,456
1234567890 使用正则 (?=\d{3}$) -> 1234567,890

去掉开头的逗号

java中使用的正则表达式为 (?!^)(?=(\\d{3})+$)

结合(?!^),即从后往前每三个数字的位置前添加逗号,但是这个位置不能是^首位。

插入多个逗号,输出结果
1
2
3
4
5
6
12         使用正则 (?!^)(?=(\d{3})+$) -> 12
123        使用正则 (?!^)(?=(\d{3})+$) -> 123
1234       使用正则 (?!^)(?=(\d{3})+$) -> 1,234
12345      使用正则 (?!^)(?=(\d{3})+$) -> 12,345
123456     使用正则 (?!^)(?=(\d{3})+$) -> 123,456
1234567890 使用正则 (?!^)(?=(\d{3})+$) -> 1,234,567,890

示例的完整测试代码如下

测试代码
import java.util.Locale;

public class RegReplace {
    public static void main(String[] args) {
        final String[] regs = {"(?=\\d{3}$)",
                "(?=(\\d{3})+$)",
                "(?!^)(?=(\\d{3})+$)"}; // (1)
        final String[] strs = {"12", "123", "1234", "12345", "123456", "1234567890"};
        System.out.println("正则表达式有 " + regs.length + "个;" + "待检测的字符串有 "
                + strs.length + "个");
        for (String r : regs) {
            for (String s : strs) {
                extractTextFrom(r, s);
            }
            System.out.println();
        }
    }

    private static void extractTextFrom(String reg, String txt) {
        String res = txt.replaceAll(reg, ",");
        System.out.printf(Locale.CHINA, "%-10s 使用正则 %s -> %s%n", txt, reg, res);
    }
}

  1. 注意字符串里的转义符

代码截图

代码截图

手机号变成3-4-4结构

针对国内的手机号。假设手机号 13800000000 ,变成 138-0000-0000

参考上面的例子,从右往左,每4个数字,加一个分隔符

java代码中使用的正则 (?=(\\d{4})+$)

和上面一样,要注意转义符。 java代码中的转义符和输出结果的要区分

测试代码
import java.util.Locale;

public class RegPhoneNumber {
    public static void main(String[] args) {
        String reg = "(?=(\\d{4})+$)";
        extractTextFrom(reg, "13812345678", ",");
        extractTextFrom(reg, "18100000000", "-");
    }

    private static void extractTextFrom(String reg, String txt, String replaceText) {
        String res = txt.replaceAll(reg, replaceText);
        System.out.printf(Locale.CHINA, "%-10s 使用正则 %s -> %s%n", txt, reg, res);
    }
}

输出结果

13812345678 使用正则 (?=(\d{4})+$) -> 138,1234,5678
18100000000 使用正则 (?=(\d{4})+$) -> 181-0000-0000
本站说明

一起在知识的海洋里呛水吧。广告内容与本站无关。如果喜欢本站内容,欢迎投喂作者,谢谢支持服务器。

AndroidTutorial - Gitee AndroidTutorial - Github 反馈问题 最近更新 投喂作者

Ads