【问题标题】:Java string replace using regex使用正则表达式替换 Java 字符串
【发布时间】:2014-06-23 19:53:29
【问题描述】:

我有值为“Address Line1”、“Address Line2”...等的字符串。 如果字符串中有任何数值,我想添加一个空格,例如 “地址线 1”、“地址线 2”。

我可以像这样使用包含和替换来做到这一点

String sample = "Address Line1";
if (sample.contains("1")) {
    sample = sample.replace("1"," 1");
}

但是如何使用正则表达式来做到这一点?

【问题讨论】:

  • 如果数字前已经有空格,是否要再添加一个空格?

标签: java regex


【解决方案1】:
sample = sample.replaceAll("\\d+"," $0");

【讨论】:

    【解决方案2】:

    要使用正则表达式,您需要replaceAll 而不是replace 方法:

    • 你可以使用正则表达式

      • \\d+ 匹配任何一组一个或多个连续数字。我们需要所有连续数字,因为只匹配一个会从foo123 创建类似foo 1 2 3
      • (?<=[a-zA-Z])\\d 如果您想仅在前面有字母字符的数字前添加空格(?<=\\[a-zA-Z]) 部分是 look-behind 并且它只是检查测试数字是否在其前面有来自范围 a-zA-Z 的字符。
    • 作为替代,您可以使用 " $0 表示 spacematch from group 0 这表示当前由正则表达式匹配的部分。

    所以试试

    sample = sample.replaceAll("\\d+", " $0")
    

    sample = sample.replaceAll("(?<=[a-zA-Z])\\d", " $0")
    

    这会将"hello 1 world2" 更改为"hello 1 world 2" - 请注意只有2 有额外的空间。

    【讨论】:

    • 我同意,但是最好检查一下它之前是否有一个字符以防万一?并在两组之间留出空间
    • 您也需要为此添加正则表达式组
    • @EdwardM.B.我正在编辑我的答案以包括这个:)
    • @Pshemo 要使用对正则表达式中存储值的引用,必须使用组。你的正则表达式应该是 "(\\d+)" 吗?
    • @Fede $0 是对组 0 的引用,它表示来自整个正则表达式的匹配。我在这里不需要任何其他组。
    【解决方案3】:

    首先创建一个你想要搜索的模式对象并在你的情况下编译它模式对象如下:-

    Pattern p=Pattern.compile("1");
    

    现在为你的字符串创建 Matcher 对象

    Matcher m=p.matcher(sample);
    

    现在设置一个条件来检查 Matcher 是否找到了任何你的 Pattern String 并且它是否已经放置了一个 replaceAll 方法来替换它

    if(m.find())
    {   
    sample=m.replaceAll(" 1");
    }
    

    完整代码如下:-

    import java.io.*;
    import java.util.regex.*;
    class demo
    {
    public static void main(String args[])
    {
        String sample = "Address Line1";
        Pattern p=Pattern.compile("1");
        Matcher m=p.matcher(sample);
        if(m.find())
        {   
                sample=m.replaceAll(" 1");
        }
        System.out.println(sample);
    }
    }
    

    【讨论】:

    • 可以是任意数字。
    • 我认为使用正则表达式的全部意义在于,OP 不必为每个数字单独设置一些东西。
    猜你喜欢
    • 2014-08-25
    • 1970-01-01
    • 2019-12-02
    • 2015-02-27
    • 1970-01-01
    • 2018-07-13
    • 1970-01-01
    相关资源
    最近更新 更多