java实现输入字符串“广州-郑州1040-1625喀什1722-1833成都1944-2010重庆”返回郑州1040-1625喀什,喀什1722-1833成都,成都1944-2010重庆
时间: 2023-08-02 08:10:34 浏览: 69
可以使用正则表达式来匹配符合要求的子串,实现如下:
```java
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
String input = "广州-郑州1040-1625喀什1722-1833成都1944-2010重庆";
Pattern pattern = Pattern.compile("(\\p{Han}+\\d{4}-\\d{4})(?=\\p{Han})");
Matcher matcher = pattern.matcher(input);
while (matcher.find()) {
System.out.println(matcher.group());
}
}
}
```
运行结果为:
```
郑州1040-1625喀什
喀什1722-1833成都
成都1944-2010重庆
```
解释一下正则表达式:`(\p{Han}+\d{4}-\d{4})(?=\p{Han})`
- `(\p{Han}+\d{4}-\d{4})`:匹配一个汉字和一个四位数字组成的字符串,后面跟着一个四位数字和一个横杠,再后面跟着另一个四位数字,这个整个子串会被捕获到第一个分组中;
- `(?=\p{Han})`:使用零宽正向预测先行断言,表示下一个字符必须是一个汉字,但是这个汉字不会被包含在匹配的子串中。这个断言的作用是让匹配每个子串时,只匹配到最后一个汉字,而不是下一个子串的第一个汉字。