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官方文档。