java.lang.String分析摘要:
<1>matches(String regex)方法
<2>contains(CharSequence s)方法
<3>replaceFirst(String regex, String replacement)
<4>replaceAll(String regex, String replacement)
<5>split重载方法
1.matches(String regex)方法
该方法根据this字符串适配和regex匹配返回一个boolean值。
public boolean matches(String regex){
return Pattern.matches(regex, this);
}
这个方法是的属性有:public公有的。
参数:regex这是String类型,为正则表达式
返回值:boolean类型
返回值说明:如果this字符串和是实参regex的规则匹配,则返回true,否则返回false。。
该方法注意点:
该方法并不自己实现,而是通过调用Pattern.matches(String regex, CharSequence input)来实现。
2. contains(CharSequence s)方法
该方法的作用判断字符串中是否包含字符序列S。
public boolean contains(CharSequence s){
return indexOf(s.toString()) > -1;
}
这个方法是的属性有:public公有。
参数:s字符序列,String也属于字符序列
返回值:boolean类型
返回值说明:如果this字符串包含字符序列s则返回true,否则返回false。
该方法注意点:
该方法并不自己实现,而是通过indexOf(String str)方法来获取下标,但是这边indexOf如果对于空字符串的话,会返回0,也就是说contains("")的返回值总是为true
。
该源码的思路是:
<1>底层调用indexOf(String str)方法,获取str在this字符串中的下标。
<2>因为如果没有找到的话,indexOf会返回-1,所以拿返回值跟-1比较就能得到真假。
3.replaceFirst(String regex, String replacement)方法
该方法会将this字符串中第一次出现符合regex正则表达式的符号替换成replacement字符串。
public String replaceFirst(String regex, String replacement){
return Pattern.compile(regex).matcher(this).replaceFirst(replacement);
}
这个方法是的属性有:public公有。
参数:regex正则表达式
参数:replacement替换的字符
返回值:String类型
返回值说明:如果this字符串不包含regex,则返回this,否则返回首次出现符合regex被replacement替代的字符串。
4. replaceAll(String regex, String replacement)方法
该方法的作用将this字符串中所有符合正则表达式regex的字符替换成实参replacement。
public String replaceAll(String regex, String replacement){
return Pattern.compile(regex).matcher(this).replaceAll(replacement);
}
这个方法是的属性有:public公有。
参数:regex正则表达式
参数:replacement替换的字符
返回值:boolean类型
返回值说明:如果this字符串不包含regex,则返回this,否则返回 符合regex都被replacement替代后的字符串。
5. split重载方法
该方法会用实参regex(字符串或根据正则表达式)来切割this字符串,并返回字符串数组。
public String[] split(String regex){
return split(regex, 0);
}
public String[] split(String regex, int limit){
char ch = 0;
//<1>regex为一个字符,并且不属于.$|()[{^?*+\中的任何一个字符
//<2>regex为两位字符,并且不以"\"开头,且第二个字符不属于数字、字母的
//如果属于这两者则执行if中的方法
if(((regex.value.length==1 &&
".$|()[{^?*+\\".indexOf(ch=regex.charAt(0))==-1) ||
(regex.length()==2 &&
regex.charAt(0)=='\\' &&
(((ch=regex.charAt(1)-'0')|('9'-ch)<0))<0 &&
(ch-'a')|'z'-ch)<0 &&
((ch-'A')|'Z'-ch))<0)) &&
(ch < Character.MIN_HIGH_SURROGATE ||
ch > Character.MAX_LOW_SURROGATE))
{
int off = 0;
int next = 0;
boolean limited = limit>0;
ArrayList<String> list = new ArrayList<>();
//如果regex为一个字符,则ch=regex第一个字符
//如果regex为两个字符,则ch=regex第二个字符
//如果this字符串中包含ch的字符则进入while循环
while((next = indexOf(ch,off)) != -1)){
if(!limited || list.size()<limit-1){
list.add(substring(off,next));
off = next+1;
}else{
list.add(substring(off,value.length));
off = value.length;
break;
}
}
//如果没有找到匹配项,则返回this
if(off == 0){
return new String[]{this};
}
//添加剩余部分
if(!limited || list.size()<limit){
list.add(substring(off,value.length));
}
int resultSize = list.size();
if(limit == 0){
while(resultSize>0 && list.get(resultSize-1).length==0){
resultSize--;
}
}
String[] result = new String[resultSize];
return list.subList(0,resultSize).toArray(result);
}
return Pattern.compile(regex).split(this,limit);
}
这个方法是的属性有:public公有。
参数:regex正则表达式或者字符串
参数:limit限制返回的数组的最大值,如果完全切割完毕后的数组长度小于该值,则返回真实长度数组。如果传0,则代表不限制。
返回值:String[] 字符串数组类型
返回值说明:返回切割后的字符串数组。