Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用正则表达式替换Java字符串_Java_Regex - Fatal编程技术网

使用正则表达式替换Java字符串

使用正则表达式替换Java字符串,java,regex,Java,Regex,我有一个字符串,它的值是地址行1,地址行2。。。等 如果字符串中有任何数值,我想添加一个空格,如 地址行1,地址行2 我可以这样使用contains和replace String sample = "Address Line1"; if (sample.contains("1")) { sample = sample.replace("1"," 1"); } 但是如何使用regex实现这一点呢?要使用regex,您将需要replaceAll而不是replace方法: sample =

我有一个字符串,它的值是地址行1,地址行2。。。等 如果字符串中有任何数值,我想添加一个空格,如 地址行1,地址行2

我可以这样使用contains和replace

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

但是如何使用regex实现这一点呢?

要使用regex,您将需要replaceAll而不是replace方法:

sample = sample.replaceAll("\\d+"," $0");
作为正则表达式,您可以使用

\\d+匹配一个或多个连续数字的任意组。我们这里需要所有的连续数字,因为只有一个匹配的数字才能从foo123创建类似foo1、2、3的内容
?首先创建一个模式对象,该对象包含您要搜索的内容,并在您的案例中进行编译。模式对象将如下所示:-

Pattern p=Pattern.compile("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);
}
}
现在为字符串创建匹配器对象

Matcher m=p.matcher(sample);
现在设置一个条件来检查Matcher是否找到了任何模式字符串,以及它是否放置了一个replaceAll方法来替换它

if(m.find())
{   
sample=m.replaceAll(" 1");
}
完整代码如下:-

Pattern p=Pattern.compile("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);
}
}

我同意,但为了以防万一,最好先检查前面是否有字符?并在两个组之间放置空格。您需要为此添加正则表达式组too@EdwardM.B. 我正在编辑我的答案,其中包括:@ PSHEMO在ReX中引用存储的值,使用组是必要的。您的正则表达式是否应为\\d+?@Fede$0是对组0的引用,该组表示整个正则表达式的匹配。我不需要任何额外的组。这里可以有任何数字。我认为使用正则表达式的全部目的是为了使OP不必为每个数字都有单独的内容。如果数字之前已经有空格,是否要再添加一个空格?