|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
JAVA学习必须明确这是一项投资,对于大多数的人来说,学习JAVA是为了就业,还有就是刚走向工作位置的朋友想尽快赶上工作的节奏。正则|字符串 暗中光阴
有一个String,怎样查询个中是不是有y和f字符?最暗中的举措就是:
程序1:我晓得if、for语句和charAt()啊。
classTest{
publicstaticvoidmain(Stringargs[]){
Stringstr="Formymoney,theimportantthing"+"aboutthemeetingwasbridge-building";
charx=y;
chary=f;
booleanresult=false;
for(inti=0;i<str.length;i++){
charz=str.charAt(i);//System.out.println(z);
if(x==z||y==z){
result=true;
break;
}
elseresult=false;
}
System.out.println(result);
}
}
仿佛很直不雅,但这类体例难以对付庞大的事情。如查询一段笔墨中,是不是有is?是不是有thing或ting等。这是一个厌恶的事情。
Java的java.util.regex包
依照面向对象的思绪,把但愿查询的字符串如is、thing或ting封装成一个对象,以这个对象作为模板往婚配一段笔墨,就加倍天然了。作为模板的谁人工具就是上面要会商的正则表达式。先不思索那末庞大,看一个例子:程序2:不懂。先看看能够吧?
importjava.util.regex.*;
classRegex1{
publicstaticvoidmain(Stringargs[]){
Stringstr="Formymoney,theimportantthing"+"aboutthemeetingwasbridge-building";
StringregEx="a|f";//暗示a或f
Patternp=Pattern.compile(regEx);
Matcherm=p.matcher(str);
booleanresult=m.find();
System.out.println(result);
}
}
假如str婚配regEx,那末result为true,不然为flase。假如想在查找时疏忽巨细写,则能够写成:
Patternp=Pattern.compile(regEx,Pattern.CASE_INSENSITIVE);
固然临时不晓得Pattern(模板、形式)和Matcher(婚配器)的细节,程序的感到就对照爽,假如先查询is、厥后又要查询thing或ting,我们只必要修正一下模板Pattern,而不是思索if语句和for语句,大概经由过程charAt()。
1、写一个特别的字符串――正则表达式如a|f。
2、将正则表达式编译成一个模板:p
3、用模板p往婚配字符串str。
思绪分明了,如今看Java是怎样处置的(Java程序员直到JDK1.4才干利用这些类。
Pattern类与查找
①publicfinalclassjava.util.regex.Pattern是正则表达式编译后的表达法。上面的语句将创立一个Pattern对象并赋值给句柄p:Patternp=Pattern.compile(regEx);
风趣的是,Pattern类是final类,并且它的机关器是private。大概有人告知你一些计划形式的工具,大概你本人查有关材料。这里的结论是:Pattern类不克不及被承继,我们不克不及经由过程new创立Pattern类的对象。
因而在Pattern类中,供应了2个重载的静态办法,其前往值是Pattern对象(的援用)。如:
publicstaticPatterncompile(Stringregex){
returnnewPattern(regex,0);
}
固然,我们能够声明Pattern类的句柄,如Patternp=null;
②p.matcher(str)暗示以用模板p往天生一个字符串str的婚配器,它的前往值是一个Matcher类的援用,为何要这个工具呢?依照天然的设法,前往一个boolean值不可吗?
我们能够复杂的利用以下办法:
booleanresult=Pattern.compile(regEx).matcher(str).find();
实际上是三个语句兼并的无句柄体例。无句柄经常不是好体例。前面再进修Matcher类吧。先看看regEx――这个怪咚咚。
正则表达式之限制符
正则表达式(RegularExpression)是一种天生字符串的字符串。晕吧。好比说,StringregEx="me+";这里字符串me+可以天生的字符串是:me、mee、meee、meeeeeeeeee等等,一个正则表达式大概天生无量的字符串,以是我们不成能(有需要吗?)输入正则表达式发生的一切工具。
反过去思索,关于字符串:me、mee、meee、meeeeeeeeee等等,我们可否有一种言语往形貌它们呢?明显,正则表达式言语是这类言语,它是一些字符串的形式――简便而深入的形貌。
我们利用正则表达式,用于字符串查找、婚配、指定字符串交换、字符串支解等等目标。
天生字符串的字符串――正则表达式,真有些庞大,由于我们但愿由一般字符(比方字符a到z)和特别字符(称为元字符)形貌恣意的字符串,并且要正确。
先看几个正则表达式例子:
程序3:我们总用这个程序测试正则表达式。
importjava.util.regex.*;
classRegex1{
publicstaticvoidmain(Stringargs[]){
Stringstr="Formymoney,theimportantthing";
StringregEx="ab*";
booleanresult=Pattern.compile(regEx).matcher(str).find();
System.out.println(result);
}
}//ture
①"ab*"――能婚配a、ab、abb、abbb……。以是,*暗示后面字符能够有零次或屡次。假如仅仅思索查找,间接用"a"也一样。但想一想交换的情形。成绩regEx="abb*"了局怎样?
②"ab+"――能婚配ab、abb、abbb……。等价于"abb*"。成绩regEx="or+"了局怎样?
③"or?"――能婚配o和or。?暗示后面字符能够有零次或一次。
这些限制符*、+、?便利地暗示了其后面字符(子串)呈现的次数(我们用{}来形貌):x*,零次或屡次≡{0,}
专门做了这个例子;而java的这个例子好像就是为了教学而写的,很多教学目的的例子是不考虑优化、性能的。 |
|