刷題過程中遇到的這類問題--字符串匹配問題所计,解決起來簡(jiǎn)單多了柠辞。總結(jié)的不多主胧,以后補(bǔ)充吧叭首。知識(shí)面太窄了。
題目:讀入數(shù)據(jù)string[ ]踪栋,然后讀入一個(gè)短字符串焙格。要求查找string[ ]中和短字符串的所有匹配,輸出行號(hào)夷都、匹配字符串间螟。匹配時(shí)不區(qū)分大小寫,并且可以有一個(gè)用中括號(hào)表示的模式匹配损肛。如“aa[123]bb”,就是說aa1bb荣瑟、aa2bb治拿、aa3bb都算匹配。
例如:輸入? 4
Aab
a2B
ab
ABB
a[a2b]b
輸出:
1 Aab
2 a2B
4 ABB
代碼:
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Main {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
while(sc.hasNext()){
int n = sc.nextInt();//獲取輸入字符串的個(gè)數(shù)
String arr[] = new String[n];//創(chuàng)建數(shù)組
for(int i =0;i<n;i++) arr[i] = sc.next();//將輸入的字符串寫如數(shù)組arr中
Pattern p = Pattern.compile(sc.next(),Pattern.CASE_INSENSITIVE);//正則表達(dá)式笆焰,第一個(gè)參數(shù)設(shè)置匹配的格式劫谅,第二個(gè)參數(shù)為不區(qū)分大小寫。返回給一個(gè)Pattern對(duì)象P嚷掠;
for(int i=0;i<n;i++){
Matcher m = p.match(arr[i]);//將數(shù)組中的內(nèi)容與正則表達(dá)式進(jìn)行匹配
while(m.matchers()){
System.out.println((i+1)+" "+arr[i]);//將滿足條件的行 以及字符串輸出
}
}
正則表達(dá)式內(nèi)容補(bǔ)充:http://www.cnblogs.com/playing/archive/2011/03/15/1984943.html
我也是看了他的詳細(xì)講解才懂了~寫的很詳細(xì)