首頁  >  文章  >  Java  >  Java實作字串比對(基於正規)

Java實作字串比對(基於正規)

高洛峰
高洛峰原創
2017-01-16 11:05:091678瀏覽

有一個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.regregex.Pternil.的表達法。告訴你一些設計模式的東西,或是你自己查有關資料。的靜態方法,其回傳值是Pattern物件(的引用)。 p去產生一個字串str的匹配器,它的回傳值是一個Matcher類別的引用,為什麼要這個東西呢?

複製程式碼如下:

boolean result=Pattern.compile(regEx).matcher(str).find();

句柄柄相與句柄相結合的無實句柄。不是好方式。吧。必要嗎? )輸出正規表示式產生的所有東西。是這種語言,它是一些字串的模式——簡潔而深刻的描述。產生字串的字串-正規表示式,真有些複雜,因為我們希望由普通字元(例如字元a 到z)以及特殊字元(稱為元字元)描述任意的字串,而且要準確。

  先看幾個正規表示式範例:


程式3:我們總是用這個程式測試正規表示式

public static Pattern compile(String regex) {
 return new Pattern(regex, 0);
}

  ①"ab*"—能符合a、ab、abb、abbb…。所以,*表示前面字元可以有零次或多次。如果僅考慮查找,直接用"a"也一樣。但想想替換的情況。 問題regEx="abb*"結果如何?

  ②"ab+"——能匹配ab、abb、abbb……。等價於"abb*"。問題regEx="or+"結果如何?

  ③"or?"——能配對o和or。 ? 表示前面字元可以有零次或一次。

  這些限定符*、+、?方便地表示了其前面字元(子字串)出現的次數(我們用{}來描述): x*,零次或多次≡{0,}

以上就是本文的全部內容,希望可以幫助大家體會正規表示式的強大之處。

更多Java實現字串匹配(基於正規)相關文章請關注PHP中文網!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn