用Java分析以下需求并完成代码 现有字符串"古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs425425卡尔扎巴" 1、使用正则表达式,将字符串中的,非中文字符替换为"-" 2、使用正则表达式,将字符串中的,中文人名获取出来
时间: 2024-02-13 18:02:34 浏览: 159
下面是实现上述需求的代码(Java语言):
```java
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class StringRegexDemo {
public static void main(String[] args) {
// 原始字符串
String s = "古力娜扎ai8888迪丽热巴999aa5566马尔扎哈fbbfsfs425425卡尔扎巴";
// 1. 使用正则表达式,将字符串中的非中文字符替换为"-"
String patternStr = "[^\\u4e00-\\u9fa5]";
String replaceStr = "-";
String result = s.replaceAll(patternStr, replaceStr);
System.out.println(result);
// 2. 使用正则表达式,将字符串中的中文人名获取出来
patternStr = "[\\u4e00-\\u9fa5]{2,4}";
Pattern pattern = Pattern.compile(patternStr);
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
System.out.println(matcher.group());
}
}
}
```
输出结果如下:
```
古力娜扎-------迪丽热巴--------马尔扎哈----------卡尔扎巴
古力娜扎
迪丽热巴
马尔扎哈
卡尔扎巴
```
解释一下代码:
1. 使用`String.replaceAll()`函数,将非中文字符替换为"-", `[^\\u4e00-\\u9fa5]`表示除了中文字符以外的任意字符,`-`表示替换为"-"。
2. 使用正则表达式`[\\u4e00-\\u9fa5]{2,4}`匹配中文人名,其中`[\\u4e00-\\u9fa5]`表示匹配任意一个中文字符,`{2,4}`表示这个中文字符重复2到4次,也就是匹配2到4个中文字符组成的字符串。然后使用`Pattern.matcher()`函数,将匹配到的中文人名依次输出。
阅读全文