匹配字符串
matches 方法
String.matches() 返回是否匹配指定的字符 如果是返回true 否则返回false 类似于 equals方法
例:
"java".matches("java"); return true
当然 括号中是 正则表达式 matches 要做的是判断 当前字符串是否满足正则表达式
正则表达式的语法
更正 : 表格最后一个空删去最后一行
几个注意点 :
- 反斜杠是 特殊字符 要用 \\ 表示 括号要用 \\(
- 空白字符 即 ' ' '\t' '\n' '\r' 和 '\f' 则 \s 就是 [\t\n\r\f]
- 单个字符是任何字母, 数字 , 或下划线字符
- 量词符 (quantifier)用于确定量词符前面的模式会重复多少次 即六个条目:* 、 + 、 ? 、 {n} 、 {n, } 、{n, m} 其中 *等同于 {0, }, +等同于 {1,} , ?等同于{0,1}
- 不要再重复量词中使用空白符 例 : a{2,3} 不能写成 a{2, 3}
- 可以用括号进行模式分组 例如: (ab){3} 匹配ababab ab{3}匹配abbb
import java.util.Scanner;
public class Regex {
public static void main(String[] args) {
if("java".matches("j{1,3}ava")) System.out.println("true");
else System.out.println("false");
/*
返回true
*/
/*加了下面一段 就编译错误了
Unclosed counted closure near index 4
*/
//if("java".matches("j{1, 3}ava")) System.out.println("true");
//else System.out.println("false");
}
}
一些示例:
import java.util.Scanner;
public class Regex {
public static void main(String[] args) {
//示例1 社会安全号的模式 xxx-xx-xx
System.out.println("1: ");
if("222-11-44".matches("[\\d]{3}-[\\d]{2}-[\\d]{2}")) System.out.println("true");
else System.out.println("false");
if("222-11-44".matches("[\\d]{3}-[\\d]{2}-[\\d]{4}")) System.out.println("true");
else System.out.println("false");
//返回 一个true false
//示例2 以偶数结尾的数字
System.out.println("2: ");
if("222".matches("[\\d]*[02468]")) System.out.println("true");
else System.out.println("false");
if("221".matches("[\\d]*[02468]")) System.out.println("true");
else System.out.println("false");
/*返回 true false
* [\\d]*代表任意多个数字
* [02468]代表后面加任何一个一位偶数
* 那么组合起来可以表示末尾是偶数的数
*/
//示例3 电话号码模式(xxx)xxx-xxxx
System.out.println("3: ");
if("(123)224-4152".matches("\\([\\d]{3}\\)[\\d]{3}-[\\d]{4}")) System.out.println("true");
else System.out.println("false");
if("123224-4152".matches("\\([\\d]{3}\\)[\\d]{3}-[\\d]{4}")) System.out.println("true");
else System.out.println("false");
/*输出 true false
* 括号是正则表达式的特殊字符 用\\( 和 \\) 来表示 字面值
*/
//示例4 姓名 至少2个最多20个字符 且首字母大写
System.out.println("4: ");
if("Amy".matches("[A-Z][a-zA-Z]{1,19}")) System.out.println("true");
else System.out.println("false");
if("Amy000".matches("[A-Z][a-zA-Z]{1,19}")) System.out.println("true");
else System.out.println("false");
if("A".matches("[A-Z][a-zA-Z]{1,19}")) System.out.println("true");
else System.out.println("false");
//输出 true false false
//示例5 判断是否为标识符
/*
* 标识符是以字母、数字、下划线和美元符号组成 但不能由数字开头
*/
System.out.println("5: ");
if("Amy000".matches("[A-Za-z_$][\\w$]*")) System.out.println("true");
else System.out.println("false");
if("2qw".matches("[A-Za-z_$][\\w$]*")) System.out.println("true");
else System.out.println("false");
//输出 true false
//示例6 选择匹配
System.out.println("6: ");
if("hello java".matches("hello (java|world)")) System.out.println("true");
else System.out.println("false");
if("hello world".matches("hello (java|world)")) System.out.println("true");
else System.out.println("false");
//输出 true true
//示例7 任何字符串
System.out.println("7: ");
if("hello javat/bdd/fvvv12.,".matches(".*")) System.out.println("true");
else System.out.println("false");
//输出true
}
}
返回情况:
1:
true
false
2:
true
false
3:
true
false
4:
true
false
false
5:
true
false
6:
true
true
7:
true
替换拆分字符串
replaceAll() 替换所有比匹配的字符串
replaceFirst() 替换第一个匹配的字符串
split() 使用匹配的分隔符将一个字符串分割为多个子字符串
+replaceAll(regex: String, replacement : String) : String 将所有字符串替换为replacement变量中的字符串
+replaceFirst(regex: String, replacement : String) : String 将匹配的第一个字符串转换为replacement中的变量字符串 并返回新的字符串
+split(regex: String) : String[ ] 返回一个字符串数字包含被匹配模式的分隔符拆分的字符串
+split(regex: String, limit : int) : String[ ] 除使用了limit参数控制的模式应用次数外,与前相同 最多匹配limit - 1次 limit <= 0等同于 split(regex);
测试:
import java.util.Scanner;
public class Regex {
public static void main(String[] args) {
System.out.println("Java Java Java".replaceAll("v\\w", "wi"));
//输出 Jawi Jawi Jawi
System.out.println("Java Java Java".replaceFirst("v\\w", "wi"));
//输出 Jawi Java Java
String[] tokens1 = "java1java2java3lllll2l".split("\\d", 0);
for(String i : tokens1)
System.out.print(i + " ");
//输出java java java lllll l
String[] tokens2 = "java1java2java3lllll2l".split("\\d", 1);
for(String i : tokens2)
System.out.print(i + " ");
System.out.println();
//输出java1java2java3lllll2l
String[] tokens3 = "java1java2java3lllll2l".split("\\d", 2);
for(String i : tokens3)
System.out.print(i + " ");
System.out.println();
//输出java java2java3lllll2l
String[] tokens4 = "java1java2java3lllll2l".split("\\d", 3);
for(String i : tokens4)
System.out.print(i + " ");
System.out.println();
//输出java java java3lllll2l
String[] tokens5 = "java1java2java3lllll2l".split("\\d", 4);
for(String i : tokens5)
System.out.print(i + " ");
System.out.println();
//输出java java java lllll2l
String[] tokens6 = "java1java2java3lllll2l".split("\\d", 5);
for(String i : tokens6)
System.out.print(i + " ");
System.out.println();
//输出java java java lllll l
}
}
运行结果:
Jawi Jawi Jawi
Jawi Java Java
java java java lllll l java1java2java3lllll2l
java java2java3lllll2l
java java java3lllll2l
java java java lllll2l
java java java lllll l