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
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。