Java中的replace及正则表达式

Java中的replace及正则表达式

在Java中,replace方法是字符串类中的方法之一,它的作用是将一个字符或一组字符替换成新的字符或一组字符。replace方法的参数可以是普通字符串,也可以是正则表达式。

replace方法

replace方法有两个形式,分别是replace和replaceAll。它们的区别在于第一个参数replace是一个普通的字符串,而replaceAll是一个正则表达式。

  • replace方法
String str = "Hello World!";
str = str.replace("World", "Java");
System.out.println(str);

上面的代码中,将字符串”World”替换成”Java”,输出结果为”Hello Java!”。其中,replace方法返回的是新的字符串,因为字符串是不可修改的。

  • replaceAll方法
String str = "Hello world!";
str = str.replaceAll("world", "Java");
System.out.println(str);

上面的代码中,用正则表达式将字符串”world”替换成”Java”,输出结果为”Hello Java!”。注意,正则表达式中的字符”.”代表任何字符,”\”代表转义字符,因为”.”在正则表达式中是特殊字符,所以要用”\”转义。

正则表达式

正则表达式是一种专门用于描述字符模式的语言。在Java中,正则表达式可以使用Java.util.regex包中的Pattern和Matcher类实现。

Pattern类

Pattern类用于表示正则表达式中的一个模式。

String regex = "a*b";
Pattern pattern = Pattern.compile(regex);

其中,regex是一个正则表达式,Pattern.compile(regex)将正则表达式解析成一个模式。上述代码就创建了一个以”a”开头,接着有任意个”b”的模式。

Matcher类

Matcher类使用Pattern类的模式对字符串进行匹配。

String str = "aababb";
Matcher matcher = pattern.matcher(str);

上述代码就将模式和字符串绑定在一起。然而,matcher.find()方法是用来查找与模式匹配的子序列,而不是用来替换的。所以我们可以使用matcher.replaceAll()方法替换匹配的子序列。

String str2 = matcher.replaceAll("c");
System.out.println(str2);

上述代码就将”a*b”模式匹配的子序列替换成了”c”,输出结果为”cbc”。

示例

下面给出一个例子,将一段字符串中的日期格式都替换成另一种日期格式。

import java.util.*;
import java.util.regex.*;

public class Main {
    public static void main(String[] args) {
        String str = "Today is 2022-06-01, yesterday was 2022/05/31.";
        String regex = "(\\d{4})-(\\d{2})-(\\d{2})";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(str);
        String str2 = matcher.replaceAll("2/3/$1");
        System.out.println(str2);
    }
}

输出结果为: “Today is 06/01/2022, yesterday was 05/31/2022.”。

结论

Java中的replace方法和正则表达式可以用来替换文本中匹配的字符串。replace方法的第一个参数是普通字符串,replaceAll方法的第一个参数是正则表达式。正则表达式中可以使用”.”表示任意字符,”\d”表示数字,”{n}”表示匹配n个字符,”()”可以用来分组。具体用法可以参考Java官方文档。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程