正则表达式:
常用正则表达式:
\d : 数字字符匹配。等效于 [0-9]
\D : 非数字字符匹配。等效于 [^0-9]。
{n} : n为非负整数,正好匹配n次
{n,} : n为非负整数,至少匹配n次
[a-z]: 字符范围。匹配指定范围内的任何字符,例如,"[a-z]"匹配"a"到"z"范围内的任何小写字母。
[^a-z]: 反向范围字符。匹配不在指定的范围内的任何字符。例如,"[^a-z]"匹配任何不在"a"到"z"范围内的任何字符。
\ : 将下一字符标记为特殊字符、文本、反向引用或八进制转义符
^ : 匹配输入字符串开始的位置
$ : 匹配输入字符串结尾的位置。
* : 零次或多次匹配前面的字符或子表达式。例如,zo* 匹配"z"和"zoo"。* 等效于 {0,}
+: 一次或多次匹配前面的字符或子表达式。例如,"zo+"与"zo"和"zoo"匹配,但与"z"不匹配。+ 等效于 {1,}。
?: 零次或一次匹配前面的字符或子表达式。例如,"do(es)?"匹配"do"或"does"中的"do"。? 等效于 {0,1}。
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class JingDong {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
String reg = "\\D[1-4]\\d{3}\\D";//eg:a2019a、a2019、2019a
// 前面不能是数字,后面也不能是数字
str = str +"a";
str = "a" + str;
Pattern p = Pattern.compile(reg);
Matcher matcher = p.matcher(str);
while(matcher.find()){
System.out.print(matcher.group(0).substring(1,5) + " ");
}
}
public static boolean isNum(char a){
if(Character.isDigit(a)){
return true;
}else
return false;
}
}
传统匹配:
import java.util.*;
public class JingDong {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
if(str.length()<=2000){
String out = "";
for (int i = 0; i < str.length()-1;) {
if(isNum(str.charAt(i) )&& Integer.parseInt(String.valueOf(str.charAt(i))) <=4 && Integer.parseInt(String.valueOf(str.charAt(i)))>=1){
if(isNum(str.charAt(i+1))){
if(isNum(str.charAt(i+2))){
if(isNum(str.charAt(i+3))){
if (!isNum(str.charAt(i+4))){
out += str.substring(i,i+4);
out += " ";
i+=4;
}
i+=4;
}else
i++;
}else
i++;
}else
i++;
}else
i++;
}
System.out.println(out);
}
public static boolean isNum(char a){
if(Character.isDigit(a)){
return true;
}else
return false;
}
}