Java中获取子字符串的几种方法示例
首先假如有这样一串字符串:
Strings="共100页,1234...";
假如我想把"100"给取出来,该如何做?
方法一:采用split的方式
System.out.println(s.split("")[1]);或者System.out.println(s.split("\\s")[1]);
假如空""有多个时,可以这样:
System.out.println(s.split("\\s+")[1]);
注:split是支持正则的,\s在正则中表示空格,+在正则中表示至少1个,即1个或多个,所以\s+表示至少有一个空格
方法二:采用indexOf的方式
intbegin=s.indexOf("");
intend=s.indexOf("",begin+1);
System.out.println(s.substring(begin+1,end));
方法三:正则
封装好的一个正则类:
publicclassRegExp{
publicbooleanmatch(Stringreg,Stringstr){
returnPattern.matches(reg,str);
}
publicList<String>find(Stringreg,Stringstr){
Matchermatcher=Pattern.compile(reg).matcher(str);
List<String>list=newArrayList<String>();
while(matcher.find()){
list.add(matcher.group());
}
returnlist;
}
publicStringfind(Stringreg,Stringstr,intindex){
Matchermatcher=Pattern.compile(reg).matcher(str);
if(matcher.find()){
returnmatcher.group(index);
}
returnnull;
}
publicStringfindString(Stringreg,Stringstr){
StringreturnStr=null;
List<String>list=this.find(reg,str);
if(list.size()!=0)
returnStr=list.get(0);
returnreturnStr;
}
}
RegExpre=newRegExp();
System.out.println(re.findString("\\d+",s));
System.out.println(re.findString("(?<=共).*?\\d+",s).trim());
注:正则中\d表示数字,(?<=共)是一种预查模式
方法四:采用replaceFirst的方式
System.out.println(s.replaceFirst(".*?(\\d+).*","$1"));
replaceFirst也是支持正则的
注:?在正则中表示最小匹配模式,$1表示第一个()表示式里面的内容。
总结
以上四种方法中,其中有三种都与正则有关系,所以,要想玩转字符串的操作,具备一定的正则表示式的能力还是很有必要的!
PS:这里再为大家提供2款非常方便的正则表达式工具供大家参考使用:
JavaScript正则表达式在线测试工具:
http://tools.jb51.net/regex/javascript
正则表达式在线生成工具:
http://tools.jb51.net/regex/create_reg
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。