Java完成字符串婚配(基於正則)。本站提示廣大學習愛好者:(Java完成字符串婚配(基於正則))文章只能為提供參考,不一定能成為您想要的結果。以下是Java完成字符串婚配(基於正則)正文
有一個String,若何查詢個中能否有y和f字符?最陰郁的方法就是:
法式1:我曉得if、for語句和charAt()
class Test{ public static void main(String args[]) { String str="For my money, the important thing "+"about the meeting was bridge-building"; char x='y'; char y='f'; boolean result=false; for(int i=0;i<str.length;i++){ char z=str.charAt(i); //System.out.println(z); if(x==z||y==z) { result=true; break; } else result=false; } System.out.println(result); } }
似乎很直不雅,但這類方法難以敷衍龐雜的任務。如查詢一段文字中,能否有is?能否有thing或ting等。這是一個憎惡的任務。
Java的java.util.regex包
依照面向對象的思緒,把願望查詢的字符串如is、thing或ting封裝成一個對象,以這個對象作為模板去婚配一段文字,就加倍天然了。作為模板的誰人器械就是上面要評論辯論的正則表達式。先不斟酌那末龐雜,看一個例子: 法式2:不懂。先看看可以吧?
import java.util.regex.*; class Regex1{ public static void main(String args[]) { String str="For my money, the important thing "+"about the meeting was bridge-building"; String regEx="a|f"; //表現a或f Pattern p=Pattern.compile(regEx); Matcher m=p.matcher(str); boolean result=m.find(); System.out.println(result); } }
假如str婚配regEx,那末result為true,不然為flase。假如想在查找時疏忽年夜小寫,則可以寫成:
Pattern p=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類與查找
①public final class java.util.regex.Pattern是正則表達式編譯後的表達法。上面的語句將創立一個Pattern對象並賦值給句柄p:Pattern p=Pattern.compile(regEx);
風趣的是,Pattern類是final類,並且它的結構器是private。或許有人告知你一些設計形式的器械,或許你本身查有關材料。這裡的結論是:Pattern類不克不及被繼續,我們不克不及經由過程new創立Pattern類的對象。
是以在Pattern類中,供給了2個重載的靜態辦法,其前往值是Pattern對象(的援用)。如:
public static Pattern compile(String regex) { return new Pattern(regex, 0); }
固然,我們可以聲明Pattern類的句柄,如Pattern p=null;
②p.matcher(str)表現以用模板p去生成一個字符串str的婚配器,它的前往值是一個Matcher類的援用,為何要這個器械呢?依照天然的設法主意,前往一個boolean值不可嗎?
我們可以簡略的應用以下辦法:
boolean result=Pattern.compile(regEx).matcher(str).find();
實際上是三個語句歸並的無句柄方法。無句柄經常不是好方法。前面再進修Matcher類吧。先看看regEx——這個怪咚咚。
正則表達式之限制符
正則表達式(Regular Expression)是一種生成字符串的字符串。暈吧。好比說,String regEx="me+";這裡字符串me+可以或許生成的字符串是:me、mee、meee、meeeeeeeeee等等,一個正則表達式能夠生成無限的字符串,所以我們弗成能(有需要嗎?)輸入正則表達式發生的一切器械。
反過去斟酌,關於字符串:me、mee、meee、meeeeeeeeee等等,我們可否有一種說話去描寫它們呢?明顯,正則表達式說話是這類說話,它是一些字符串的形式——簡練而深入的描寫。
我們應用正則表達式,用於字符串查找、婚配、指定字符串調換、字符串朋分等等目標。
生成字符串的字符串——正則表達式,真有些龐雜,由於我們願望由通俗字符(例如字符 a 到 z)和特別字符(稱為元字符)描寫隨意率性的字符串,並且要精確。
先看幾個正則表達式例子:
法式3:我們總用這個法式測試正則表達式
import java.util.regex.*; class Regex1{ public static void main(String args[]) { String str="For my money, the important thing "; String regEx="ab*"; boolean result=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,}
以上就是本文的全體內容,願望可以贊助年夜家領會正則表達式的壯大的地方。