字符串算法&&正则表达式
要处理有关字符串的编程题,肯定是要用到java的字符串操作的api了
string的api
-
toCharArray
String string=“hello world”;
char[] chars=string.toCharArray();
结果是: [h,e,l,l,o, ,w,o,r,l,d] 【转字符数组】 -
substring
String string=“hello world”;
String substr=string.substring(0,3);
结果是: hel
【截取的是0,1,2下标的字串(不包括3)-------截取字符】 -
replace
String string=“hello world”;
String result=string.replace(“ello”,“i”);
结果是: hi world 【字符替换】 -
charAt()
char c=str.charAt(0);
结果是: h 【按索引值获取字符】 -
split()
String str=“hello world 233”;
String[] strs=str.split("\s+");
【按规则划分字符串】 -
indexOf
String str=“hello world 233”;
int strs=str.indexOf(“l”,8);
int index=str.indexOf(“f”);
System.out.println(strs);
System.out.println(index);
结果如下:
从8号开始查找l,找到的第一个的位置是索引在9号
从0开始找,没找到就返回-1 -
startsWith
String str="hello world 233";
boolean zj=str.startsWith("wor");
boolean ks=str.startsWith("hell");
System.out.println(zj);
System.out.println(ks);
结果:
【检查字符串是否是按指定的keyword开头的】
把string当成char[]数组,里面的每个元素是char
正则表达式规则
- 正则表达式
正则表达式是一种特殊的字符串模式,用于匹配一组字符串
贪婪量词
“*”(贪婪) 重复零次或更多
“+”(懒惰) 重复一次或更多次
“?”(占有) 重复零次或一次
“{n}” 重复n次
“{n,m}” 重复n到m次
“{n,}” 重复n次或更多次
懒惰限定符
“*?” 重复任意次,但尽可能少重复
“+?” 重复1次或更多次,但尽可能少重复
“??” 重复0次或1次,但尽可能少重复
“{n,m}?” 重复n到m次,但尽可能少重复
“{n,}?” 重复n次以上,但尽可能少重复
元字符
“^” :^会匹配字符串的起始位置
" 会匹配字符串的结尾
“\w”:匹配字母,数字,下划线.
“\d”: 匹配数字
“\b” : 匹配单词边界
“\s”:匹配空格
[a-z]匹配a至z的所有字母
几种反义
写法很简单改成大写就行了,意思与原来的相反,这里就不举例子了
“\W” 匹配任意不是字母,数字,下划线 的字符
“\S” 匹配任意不是空白符的字符
“\D” 匹配任意非数字的字符
“\B” 匹配不是单词开头或结束的位置
“[^abc]” 匹配除了abc以外的任意字符
捕捉分组
String line = “This order was placed for QT3000! OK?”;
String pattern = "(\D*)(\d+)(.)";
// 创建 Pattern 对象
Pattern r = Pattern.compile(pattern);
// 现在创建 matcher 对象
Matcher m = r.matcher(line);
if (m.find( )) {
则打印: m.group(0),m.group(1),m.group(2) ,m.group(3)
}
结果如下:【0组是整个字符串,1是匹配3000以前的,剩下的就是3000! OK?,2组就是在3000! OK?的基础上进行匹配,3组把3000匹配了,4组就是在! OK?里面去继续匹配字符】
java字符正则表达式编程模板
// 按指定模式在字符串查找
String line = "This order was placed for QT3000! OK?";
String pattern = "(\\D*)(\\d+)(.*)";
// 创建 Pattern 对象
Pattern r = Pattern.compile(pattern);
// 现在创建 matcher 对象
Matcher m = r.matcher(line);
if (m.find( )) {
System.out.println("Found value: " + m.group(0) );
System.out.println("Found value: " + m.group(1) );
System.out.println("Found value: " + m.group(2) );
System.out.println("Found value: " + m.group(3) );
} else {
System.out.println("NO MATCH");
}