程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java完成字符串婚配(基於正則)

Java完成字符串婚配(基於正則)

編輯:關於JAVA

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,}

以上就是本文的全體內容,願望可以贊助年夜家領會正則表達式的壯大的地方。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved