下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
6章字符串操作JavaJava中的几个主要的跟字符相关数据结构类型:字符、字符串(String类、字符串缓冲(StringBuffer类、字符串分解类(StringTokenizer类和正则表达式(RegularExpressionsJava中已经提供的强大字符串数据结构可以使编写字符和字字符是一种通用数据类型,用单引号括起来的一个字符,如'a'、'A'。在本书前面已经介绍过了字符,跟字符密切相关的通用数据类型是字符串。字符串常量是引号括起来的一串字符,比如"oordn"JavaString类(String类将在6.2节中介绍)的一个特定的对象来处理的,而不是一个数据。StringJava中,字符串变量的类型为StringString类的特殊对象String类的构造在最通常的情况下,stringStringgreeting= Stringgreeting=newString("用"o"构造出greeting这个String类的对象。char[]bunch={'H','e','l','l','o'};Stringgreeting=newString(bunch);bunchgreeting。String类的构造函数还有其他的形式:字符串比较两个字符串内容是否一样可以使用String类中提供的equals和equalsIgnoreCase两个方法。而equals测试两个字符串是否含有相同的字符,equalsIgnoreCase则是忽略字符串中的大小写(Case)比较两个字符串的。如果结果一致,这两个方法返回true,内容不同,则返回值为false。需要注意的地方是在Java早期的版本中==运算符只能用来测试两个字符串是否是相同的字符串实例,而在新的JDK中,==运算符和equals的效果是一样如果要比较两个字符串的大小关系,即它们按字母序排列的时候谁将排面,String类提供了一个compareTo的方法,它的函数原型是:publicintcompareTo(String它的返回值为一个整型的值,如果返回值为-1str的前面,返回值为0,该字符串与str内容一致;返回值为1,该字符串在str后面。//~publicclass{publicpublicstaticvoidmain(String[]{StringstrA="AppleTree";StringstrB="appleTREE";StringstrC="AppleTree";if(strA==strB)System.out.println(strA+"&"+strB+"arethe}elseSystem.out.println(strA+"&"+strB+"arenotthe}if(strA==strC)System.out.println(strA+"&"+strC+"arethe}elseSystem.out.println(strA+"&"+strC+"arenotthe}if(strA.equals(strB))System.out.println(strA+"isequalsto"+}elseSystem.out.println(strA+"isnotequalsto"+}if(strA.equals(strC))System.out.println(strA+"isequalsto"+}elseSystem.out.println(strA+"isnotequalsto"+}if(strA.equalsIgnoreCase(strB))System.out.println(strA+"&"+strB+"arethe}elseSystem.out.println(strA+"&"+strB+"arenotthe}}}AppleTree&appleTREEarenotthesame.AppleTree&AppleTreearethesame.AppleTreeisnotequalstoappleTREEAppleTreeisequalstoAppleTreeAppleTree&appleTREEarethesame(nocase).hashCode()String类提供一个hashCode()的方法,返回int类型的哈希值,其计算公式如hashcode=s[0]*31^(n-1)+s[1]*31^(n-2)+...+s[n-s[i]i个字符,n是字符串的长度,^是幂运算符号。空字符串的哈希值是0。publicclass{publicTestHashCode()publicstaticvoidmain(String[]{Stringstr=intcode=System.out.println("theString"+str+"hashcodeis"+}}theStringabchashcodeis要查找某个字符或者子字符串在一个字符串中的位置,Java提供的方法是indexOf,publicintindexOf(intUnicodech的字符的位置,并返回。如果查找失败,返回-publicintindexOf(intch,intfromIndexUnicodech的字符的位置,并返回。如果publicintlastIndexOf(intUnicodech的字符的位置,并返回。如果查找失败,返回-publicintlastIndexOf(intch,intfromIndex)fromIndexUnicodech的字符的位置,并返回。如果查找失publicintindexOf(String查找字符串中的一个子串为str的位置,并返回。如果查找失败,返回-publicintindexOf(Stringstr,intfromIndexstr的位置,并返回,如果查找失败,publicintlastIndexOf(String查找字符串中最后一个子串为str的位置,并返回,如果查找失败,返回-publicintlastIndexOf(Stringstr,intfromIndexstr的位置,并返回,如果查找失败,返回-1;publicclass{publicTestIndex()publicstaticvoidmain(String[]{Strings="ssabcdefgabcklabcstabcxyz";Stringsubs="abc";System.out.println("thefirst'a'isat"+s.indexOf('a'));System.out.println("thelast'a'isat"+s.lastIndexOf('a'));System.out.println("thefirst'a'after10isat"+s.indexOf('a',10));System.out.println("thelast'a'before10isat"+System.out.println("thefirstabcisat"+s.indexOf(subs));System.out.println("thelastabcisat"+s.lastIndexOf(subs));System.out.println("thefirstabcafter10isat"+s.indexOf(subs,10));System.out.println("thelastabcbefore10isat"+}}程序中用于查找的字符串为"ssabcdefgabckabcsabcxyz",分别按不同的条件查找‘a’和"abc"的位置。thefirst'a'isat2thelast'a'isatthefirst'a'after10isat14thelast'a'before10isat9thefirstabcisat2thelastabcisatthefirstabcafter10isat14thelastabcbefore10isat9抽取Stringsubstring,它有以下几种形式:publicStringsubstring(intbeginIndex);beginIndexbeginIndex的取值范围应该在区间[0,publicStringsubstring(intbeginIndex,intbeginIndexendIndexbeginIndexendIndex取值范围也应该在区间[0,n]内,且beginIndex<=endIndex,如果不满足,返回值为空字符串。publicclass{publicTestSubstring()publicstaticvoidmain(String[]{Stringstr="ThisisanSystem.out.println("thesubstringafter11is"+str.substring(11));System.out.println("thesubstringbetween8&10is"+}}thesubstringafter11isapplethesubstringbetween8&10isan字符串非常遗憾的是,由于String类不提供修改自身的方法,因此,String从初始化之后就不能再改变其内容了,如果要使用String类的方法对改变一个字符串的内容,必须另外生成一个新的字符串,或者,更方便的方法是使用StringBuffer类来保存字符串的内容而不是String类。StringBuffer类的用法在6.3节会有详细叙述。String类的其他publicintpubliccharcharAt(intipublicStringreplace(charoldChar,charoldCharnewCharStrngvalueOf方法,将其它类型的变量转化为字符串并返回。可供转化的变量的类型有:int、foat、doube、ong、char、char[]、Obect等。程序示例://~publicclass{publicTestExtraString()publicstaticvoidmain(String[]{Stringstr="Thisisanapple.";intslen=str.length();System.out.println("Thelengthof"+str+"is"+for(inti=0;i<slen;i++)System.out.println("No."+i+"charis:"+}System.out.println("Changeatob:"+str.replace('a',//将字符串中的'a'改为'b'打doubled=Stringdstr=String.valueOf(d);System.out.println("thedouble'sStringis"+dstr);}}ThelengthofThisisanapple.is17No.0charis:TNo.1charis:hNo.2charis:iNo.3charis:sNo.4charis:No.charis:icharis:scharis:No.8charis:aNo.9charis:nNo.10charis:No.11charis:aNo.12charis:pNo.13charis:pNo.14charis:lNo.15charis:eNo.16charis:Changeatob:Thisisbnbpple.thedouble'sStringis3.141529StringBuffer由于String类不能用于修改,Java中提供一种字符串内容可变化的StringBuffer类。 类的使用跟String 类相似,但同时可以通过它的方法修改自身长度和内容。StringBuffer类的设计是满足多线程的要求的,即StringBuffer类的对象可用于多个线 类的构造 类有三个构造函数publicpublicStringBuffer(intlength);publicStringBuffer(String以一个String类的对象str的内容到StringBuffer的内容中,StringBuffer的长度str16StringBuffersbuffer1=newStringBuffer();StringBuffersbuffer2=newStringBuffer(50);Stringstr="Thisisacat.Thatisadog.Iamaboy.Whatareyou?";StringBuffersbuffer3=newStringBuffer(str);length()、capacity()、setLength() ensureCapacity()方String类相似,StringBufferlength()StringBufferStringBuffer类另外提供capacity()方法返回StringBuffer的容 minimumCapacity)用来确保 的容量不低setLength(intnewLength)StringBuffernewLength。publicintlength();publicintcapacity();publicvoidsetLength(intpublicvoidensureCapacity(intcapacity(容量)与length(长度)//~StringBufferCapa.javapublicclassStringBufferCapapublicStringBufferCapa()}publicstaticvoidmain(String[]{StringBuffersBuffernewStringBuffer("abcdefghijklmnopqrstuvwxyz");System.out.println("Thelengthis:"+sBuffer.length());System.out.println("Thecapacityis:"+sBuffer.capacity());System.out.println("Setthelengthis40");System.out.println("Thelengthis:"+sBuffer.length());System.out.println("Thecapacityis:"+sBuffer.capacity());System.out.println("Setthelengthis60");System.out.println("Thelengthis:"+sBuffer.length());System.out.println("Thecapacityis:"+sBuffer.capacity());}}Thelengthis:26Thecapacityis:42Setthelengthis40Thelengthis:40Thecapacityis:42Setthelengthis60Thelengthis:60Thecapacityis:86lengthcapacitylength26>16,于capacity26+16=42;设length40后,因40<42,capacity不变;当设置的length为60,60>42,于是新的capacity就是60+16=86了。charAt()、setCharAt()、getChars() reverse()方charAt(inti)iStringsetCharAt(inti,charnewChar)inewChargetChars(intsrcBegin,intsrcEnd,char[]dst,int将StringBuffer中的字符串从srcBegin到srcEnd之间的内容到目的字符数组dstBeginreverse()StringBuffer中的字符串翻转。对setCharAt()和reverse()方法的程序示例:publicclassStringBufferChar{publicStringBufferChar(){}publicstaticvoidmain(String[]{StringBuffersBuffernewStringBuffer("abcdefghijklmnopqrstuvwxyz");for(inti=5;i<10;i++){sBuffer.setCharAt(i//59的位置设为} //打印sBuffer的内 //打印sBuffer的内容}} Append()在String类中,要连接两个字符串需要创建一个新的String来保存,而在类中提供了append方法,直接在字符串后添加的内容appendappend(booleanb):在字符串后附加一个布尔型参数的字符串形式。append(charc):在字符串后附加一个字符型参数的字符串形式。append(inti):在字符串后附加一个整型参数的字符串形式。append(longl):在字符串后附加一个长整型参数的字符串形式。append(floatf):在字符串后附加一个浮点数型参数的字符串形式。append(doubled):在字符串后附加一个双精度参数的字符串形式。append(charstr):在字符串后附加一个字符数组参数组成的字符串。,append(Objecto)Objectappend(Stringstr)String类的字符串。publicclassStringBufferAppend{publicStringBufferAppend(){}publicstaticvoidmain(String[]{StringBuffersBuffer=newStringBuffer("abcd"); sBuffer.append("boolean:");sBuffer.append("int:");sBuffer.append("double:"); }}abcd----boolean:trueint:1插入和StringBufferinsertappend相似,根据插入的参数的不同,insert也有十种形式:StringBufferinsert(intoffset,booleanb)StringBufferinsert(intoffset,charc)StringBufferinsert(intoffset,char[]str)StringBufferinsert(intindex,char[]str,intoffset,intlen)StringBufferinsert(intoffset,doubled)StringBufferinsert(intoffset,floatf)StringBufferinsert(intoffset,inti)StringBufferinsert(intoffset,longl)StringBufferinsert(intoffset,Objectobj)StringBufferinsert(intoffset,Stringstr)offset的参数指示插入字符串的位置,其他参数的含义和append方法一样。StringBufferdeletedeleteCharAt方法。StringBufferdelete(intstart,intend);StringBufferstartendStringBufferdeleteCharAt(intindex指定的位置上删除一个字符。StringBuffer的长度缩短一个字符。publicclass{publicStringBufferInsDel()publicstaticvoidmain(String[]{StringBuffersBuffer=newStringBuffer();sBuffer.insert(0,true);sBuffer.insert(2,3. sBuffer.insert(4,"boolean");System.out.println("Thelengthis:"+sBuffer.length());sBuffer.delete(4,11);System.out.println("Thelengthis:"+sBuffer.length());}} Thelengthis:20 Thelengthis: 类的其他String提供了toString()方法,返回与StringBuffer字符串内容一样的一个StringString由上节字符串String类的介绍可知,这个方法其实跟String类的静态方法 sb)的效果是与 类一样,也提供定位字符、字符串的方法intindexOf(StringintindexOf(Stringstr,intfromIndex);intlastIndexOf(Stringstr);intlastIndexOf(Stringstr,int由于例子与String的相似,这里不一一枚StringTokenizerStringTokenizer,是Java里面提供的便字符串分解器,它的原理是根据分隔符把字符串分解为一个个的标记(Token),然后按照请求返回各个标记。这个过程称为 类的构造函数StringTokenizerStringTokenizer(StringStringTokenizer;StringTokenizer(Stringstr,Stringdelim);StringTokenizer,并指定分隔符;StringTokenizer(Stringstr,Stringdelim,booleanreturnDelims);用一个指定的字符串构造一个StringTokenizer,并指定分隔符,并指定是否将分隔符 类的常用方法StringnextToken(Stringdelim,返回下一个标记(Token);StringnextToken();StringTokenizer中的下一个标记ObjectnexnextTokenObject;intcountTokens(); 行,另一个addBr()方法将回车符'\n'用HTML里面的换行标记"<br>"替换:importjava.util.*;importpublicclass{publicTestStringTokenizer(){}publicstaticvoidmain(String[]args){TestStringTokenizertst=newStringstr="begin\n:startup\naddab\n:calculation\nendStringstrnew1 //去掉:开头的Stringstrnew2=System.out.println("Theoriginalstringis:\n"+System.out.println("Thestring mentis:\n"System.out.println("ThestringafterContentis:\n"+}public Content){StringmakeContent=newStringTokenizerstrToken=newStringtempToken=null;//如果首字符不是’:’,加入makeContent内容}return}publicStringaddBr(StringContent){StringmakeContent=newStringTokenizerstrToken=newStringTokenizer(Content,"\n");makeContent=makeContent+strToken.nextToken()+//在各个token之后加入}return}}TheoriginalstringaddaThestringafter mentis:addabThestringafterContentis:begin<br>addab<br>end<br>改进的StringTokenizer类:BreakIteratorSringokenzer用起来很方便,但它的功能却很有限。这个类只是简单地在输入字符串中查找分隔符,一旦找到了分隔符就分割字符串。它不会检查分隔符是否在子串之中这类条件,当输入字符串中出现两个连续的分隔符时,它也不会返回""(字符串长度为0)形式的标记。我们再回头分析一下StringTokenizer类的三个构造方法和它s们的局限:StringTokenizer(StringsInput):以空白字符("","\t","\n")为分隔符分割字符串。StringTokenizer(StringsInput,StringsDelimiter):以sDelimiter为分隔符分割字符串。StringTokenizer(StringsInput,StringsDelimiter,booleanbReturnTokens)sDelimiterbReturnTokens为true第一个构造函数查输入字符串是否包含子串。例如,如果以空白字符为分隔符分割"o.oday\"Iam\"gongoyhoeown",则字符分结是o.、oday、"、a、"、goingo.、oday、"Iam"、going等。第二个构造函数查两个分隔符连续出现的情况。例如,如果以","为分隔符分割publication和datepublished这四个标记,而不是book、author、publication、""、""datepublished这6个标记(其中""表示0长度字符串。要得到6个标记的答案,你必须把StringTokenizer的bReturnTokens参数设置为true。为了突破这些局限,Java2BreakIteratorStringTokenizer之上BreakIterator位于java.text.*包中,适合于文本分析的操作,获得文本中的信息, 的主要方voidsetText(StringnewText) 设置BreakIterator类中的文本为newText;currentfirstnextlastprevious()这些方法分别返回文本中当前边界(boundary,isBoundary(int 判断offset是否处在一个边界上importjava.text.*;importjava.util.Locale;publicclass{publicTestBreakIterator()publicstaticvoidmain(String[]{if(args.length==1)StringstringToExamine=//printeachwordinBreakIteratorboundary=BreakIterator.getWordInstance();printEachForward(boundary,stringToExamine);//printeachsentenceinreverseboundary=BreakIterator.ge printEachBackward(boundary,stringToExamine);printFirst(boundary,stringToExamine);printLast(boundary,stringToExamine);}}publicstaticvoidprintEachForward(BreakIteratorboundary,Stringsource){intstart=boundary.first();for(intend=boundary.next();end!=start=end,end={}}publicstaticvoidprintEachBackward(BreakIteratorboundary,Stringsource){intend=for(intstart=boundary.previous();start!=BreakIterator.DONE;end=start,start={}}publicstaticvoidprintFirst(BreakIteratorboundary,String{intstart=boundary.first();intend=boundary.next();}publicstaticvoidprintLast(BreakIteratorboundary,String{intend=boundary.last();intstart=boundary.previous();}publicstaticvoidprintAt(BreakIteratorboundary,intpos,String{intend=boundary.following(pos);intstart=boundary.previous();}}javajavaTestBreakIterator"Thisisanapple,Thatisa,a.Thisisanapple,Thatisaboy.Thisisanapple,Thatisaboy.Thisisanapple,Thatisaboy.使用正则表正则表J2SDK1.4中加入的java.util.regex包提供了对正则表达式(Regularexpressions)的支Java.lang.StringreplaceAllsplit函数也是间接地调用正则表达式来实现正则表达式是根据文本匹配模式的方法,类似于编译器生成类文件的工作原理。编译器译器能够只将有效的源代码表示转换为已编译的类文件。在正则表达式的上下文中,模式是字符序列的文本表示法。例如,如果想知道一个字符序列中是否存在carar于更复杂的模式则可以使用特殊字符作为占位符。如果不是要搜索car,而是想搜索以字母c开头并以字母r结尾的任何文本字符串,你会使用c*r模式,其中*代表第一个rc*r模式将匹配任何以c开头并以rcougar、cavaier或chryser。模式匹配的主要部分是关于要使用什么样的表达式。Pattern先保存要使用的表达式,然后将其传递给Matcher类以便在字符序列的上下文中检查其匹配情况。例如,如果您想验证一个电子邮件地址,您可能要检查用户输入是否与这样一个模式匹配—它包含一个字母数字序列,后跟一个@符号,@后又跟两组用句点隔开的字符。这可以用表达式\p{Alnum}+@\w+\.\p{Alpha}{2,3}(是的,这过于简化了电子邮件地址的结构,可\p{Alnum}+@\w+\.\p{Alpha}{2,3}。\p{Alnum}序列表示单个字母数字字符(A到Z、a到z或0到9。\p{Alnum}后面的加号(+)被称为量词(fier。它被应用在表达式的前面部分,表示\p{Alnum}必须出现一次或次。使用星号(*)表示要出现零次或一次以上(含一次。@就是意味着它必须出现在至少一个字母数字字符之后,这样整个模式匹配才能成功。\w+与\p{Alnum}+类似,但添加了下划线(_。某些序列有多个表达式。反斜杠(\.)代表句点。如果前面没有反斜杠,单独一个句点代表任意字符。最后的\p{Alpha}{2,3}表示两个或三个字母字符。只要学会了规范语言,您就能掌握模式的所有。我们来看一些更常用的表达式的种类:(Literal量词(fier:某些字符或表达式,它们被用来计算一个文字或分组可以在字符? +字符类(Characterclass:一个字符类就是方括号内的一个字符集,其中,匹配可以是\d数字(0到\D\s\S\w单字字符(a到z、A到Z、0到9以及下划线\W非单字字符(其它任意字符Posix字符类(Posixcharacterclass)US-ASCII比较时才有效。\p{Lower}\p{Upper}\p{ASCII}所有ASCII\p{Alpha}字母字符(\p{Lower}与\p{Upper}相结合\p{Digit}从0到9\p{Alnum}范围(Range:使用短线(dash)来指定包括一定范围字符的字符类。例如,[A-J]表示从A到J的大写字母。否定(Negation:脱字符(^)否定字符类的内容。例如,[^A-J]表示除A到J之Java(aterSyaEcetionPatternJava提供了两个用于正则表达式的类,PatternMatcher 类的主要 split()方 类用于构建一个模式对象来代表一个正则表达式,如StringregularExpression=Patternpattern 有了一个编译好的模式后,可以使用Pattern类根据模式把一个输入行分割为一系列单字,或者使用Matcher类执行一些更复杂的任务。Stringwords[] split方法是便的方法,它在与此模式匹配的位置将给定输入序列切分开。下面importjava.util.regex.*;publicclassSplitter{publicstaticvoidmain(String[]args)throws{Patternp= String[]result=p.split("one,two, four,for(inti=0;i<result.length;i++)}}Matcher如果想获取特定的输入,就需要Pattern的matcher()方法。在给定某个输入时,这个方法将返回适当的Matcher类。接着,使用Matcher实例遍历整个结果在输入序列中查找不同的模式匹配,或者使用Matcher实例作为查找-替换工具(后法更好:Matchermatcher=要根据整个序列匹配模式,请使用matches()。要确定是否只有序列的一部分匹配,请使用find():if(matcher.find())Stringmatch=}下面这个例子从由参数指定的文件中找出最长的单词,从下面这个例子中我们可以看到Macher的用法。importjava.io.*;importjava.nio.*;importjava.nio.channels.*;importjava.nio.charset.*;importjava.util.*;importpublicclassLongestpublicstaticvoidmain(String{if(args.length!=1){System.err.println("Provideafilename");}tryFileInputStreaminputnewFileChannelchannel=input.getChannel();intfileLength=(int)channel.size();MappedByteBufferbuffer=channel.map(FileChannel.MapMode.READ_ONLY,0,Charsetcharset=Charset.forName("ISO-8859-1");CharsetDecoderdecoder=charset.newDecoder();CharBuffercharBuffer=decoder.decode(buffer);PatternlinePatternpile(".*$",PatternwordBreakPatternMatcherlineMatcher=Stringlongest=while(lineMatcher.find())Stringline=Stringwords[]=for(inti=0,n=words.length;i<n;i++)if(words[i].length()>{longest=}}}System.out.println("Longestword:"+}catch(IOException{System.err.println("Error}}}操作符优转义符限定符*,+,?,{n},{n,},位置和顺序^,$,\或操作正则式\将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后、或一个八进制转义符。例如,'n'"n"'\n''\\'匹配"\"而"\("则匹配"("。^匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配'\n'或'\r'之后的位置。$匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配'\n'或'\r'之前的位置。*匹配前面的子表达式零次或多次。例如,zo*能匹配"z"以及"zoo"。*+匹配前面的子表达式一次或多次。例如,'zo+'能匹配"zo"以及"zoo"匹配"z"。+等价于{1,}?匹配前面的子表达式零次或一次。例如,"do(es)?"可以匹配"do"或"does""do"。?等价于{0,1}{n}n是一个非负整数。匹配确定的n次。例如,'o{2}'不能匹配"Bob"中的'o',但是能匹配"food"中的两个o。{n,}nn次。例如,'o{2,}'不能匹配"Bob"中的'o',但能匹配"foooood"中的所有o。'o{1,}'等价于'o+'。'o{0,}'则等价于'o*'。{n,m}m和nn<=m。最少匹配n次且最多匹配m次。例如,"o{1,3}"将匹配"fooooood"中的前三个o。'o{0,1}'等价于'o?'。请注意在逗号和两?当该字符紧跟在任何一个其他限制符(*,+,?,{n},{n,},n,})后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串"oooo",'o+?'将匹配单个"o",而'o+'将匹配所有'o'。.匹配除"\n"之外的任何单个字符。要匹配包括'\n''[.\n]'(pattern)匹配pattern并获取这一匹配。所获取的匹配可以从产生的Matches集合VBScript中使用SubMatches集合,在JScript中则使用$0…$9属性。要匹配圆括号字符,请使用'\('或'\)'。(?:pattern)匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行供以后使用。这在使用"或"字符(|)来组合一个模式的各个部分是很有用。例如,'industr(?:y|ies)就是一个比'industry|industries'更简略的表达式。(?=pattern)正向预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是供以用。例如,'Windows(?=95|98|NT|2000)'能匹配"Windows2000"中的"Windows""Windows3.1"中的"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后(?!pattern)负向预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如'Windows(?!95|98|NT|2000)'能匹配"Windows3.1"中的"Windows",但不能匹配"Windows2000"中的"Windows"。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后 x或y。例如,'z|food'"z"或"food"。'(z|f)ood'"zood""food" 字符集合。匹配所包含的任意一个字符。例如,'[abc]'可以匹配"plain"中的'a'。 '[^abc]'"plain"中[a- 字符范围。匹配指定范围内的任意字符。例如,'[a-z]'
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年资料员考试试题及答案
- 2025年北京市办公家具采购合同
- 2025租赁车辆抵押合同
- 2025设备采购借款合同范本AA
- 2025企业短期借款合同协议书范本
- 2025年下半年哈尔滨市政府机关幼儿园招考工作人员易考易错模拟试题(共500题)试卷后附参考答案
- 2025年下半年吉林长春莲花山生态旅游度假区招聘工作人员6人(2号)易考易错模拟试题(共500题)试卷后附参考答案
- 2025年下半年吉林省长春市市直事业单位招聘321人(5号)易考易错模拟试题(共500题)试卷后附参考答案
- 2025年下半年吉林省省直事业单位招聘372人(8号)易考易错模拟试题(共500题)试卷后附参考答案
- 2025年下半年吉安井冈山市展览馆接待员和讲解员招考(4人)易考易错模拟试题(共500题)试卷后附参考答案
- 第十章放射防护法规与标准
- 介入室医院感染预防与控制
- 演艺票务智能平台架构-洞察及研究
- 巡查工作流程课件
- 车辆税务维护管理办法
- 【正版授权】 ISO 80000-3:2019/Amd 1:2025 EN Quantities and units - Part 3: Space and time - Amendment 1
- 【《基于PHP的二手车交易网站的设计与实现》11000字(论文)】
- 舒曼共振科普课件
- 研究生学术道德与学术规范课件
- 香皂监督管理办法
- ALD工艺温度对性能影响-洞察及研究
评论
0/150
提交评论