字符串的操作,诸如追加、合并、替换、倒序、分割等,都是在编码过程中经常用到的,而且Java也提供了append、replace、reverse、split等方法来完成这些操作,它们使用起来也确实方便,但是更多的时候,需要使用正则表达式来完成复杂的处理,我们来看一个例子:统计一篇文章中英文单词的数量,很简单吧?代码如下:
package deep;
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
// 接收键盘输入
Scanner input = new Scanner(System.in);
while (input.hasNext()) {
String str = input.nextLine();
// 使用split方法分隔后统计
int wordsCount = str.split(" ").length;
System.out.println(str + "单词数:" + wordsCount);
}
}
}
运行结果:
I am a boy
I am a boy单词数:4
I am a boy
I am a boy单词数:7
所以我们可以改进程序为:
int wordsCount = str.split(" +").length;
表示以一个或多个空格作为分隔符。我们也可以使用以下正则匹配:
package deep;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Client {
public static void main(String[] args) {
// 接收键盘输入
Scanner input = new Scanner(System.in);
while (input.hasNext()) {
String str = input.nextLine();
// 正则表达式对象
Pattern pattern = Pattern.compile("\\b\\w+\\b");// \b表示的是一个单词的边界,它是一个位置界定符,\w表示的是字符或数字
// 生成匹配器
Matcher matcher = pattern.matcher(str);
// 记录单词数量
int wordsCount = 0;
// 遍历查找匹配,统计单词数量
while (matcher.find()) {
wordsCount++;
}
System.out.println(str + "单词数:" + wordsCount);
}
}
}
正则表达式是恶魔,威力巨大,但难以控制。