0

私のプログラムは、望ましいマッチング結果を表示していません。私のテキストファイルには次の行が含まれています。

  1. 赤い車
  2. 青または赤
  3. 車両

だから私が検索した場合:「赤い車」。唯一の結果として「赤い車」しか得られませんが、私が欲しいのは次の結果を得ることです。

  1. 赤い車
  2. 車両

これらの文字列はテキストファイルにあるためです。青または赤、「または」は論理的です。ですから、両方ではなく、どちらか一方に一致させたいのです。私は何が間違っているのですか?どんな助けでも大歓迎です。私のコードは次のとおりです。

    public static void main(String[] args) {
        // TODO code application logic here
        //String key;
        String strLine;
        try{
    // Open the file that is the first 
    // command line parameter   
    FileInputStream fstream = new FileInputStream("C:\\textfile.txt");
    // Get the object of DataInputStream
    DataInputStream in = new DataInputStream(fstream);
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        Scanner input  = new Scanner (System.in);         
        System.out.print("Enter Your Search:  ");
        String key = input.nextLine();

        while ((strLine = br.readLine()) != null) {     
        Pattern p = Pattern.compile(key); // regex pattern to search for
        Matcher m = p.matcher(strLine);  // src of text to search
        boolean b = false;
        while(b = m.find()) {  
        System.out.println( m.start() + " " + m.group()); // returns index and match
    // Print the content on the console
        }
        }
        //Close the input stream
     in.close();  
        }catch (Exception e){//Catch exception if any
       System.err.println("Error: " + e.getMessage());
    }
   }
 }
4

2 に答える 2

1

この正規表現を渡してみてください: -

"((?:Red)?\\s*(?:or)?\\s*(?:Car)?)"

これは一致します: -

0 or 1赤の後に0 or moreスペース、その後に0 or 1

(?:...)は非キャプチャ グループです

注: -上記の正規表現は一致しません: - Car Red.

順序を逆にすることができる場合は、次を使用できます。 -

"((?:Red|Car)?\\s*(?:or)?\\s*(?:Red|Car)?)"

から完全一致を取りgroup(0)ます。

例: -

String strLine = "Car or Red";
Pattern p = Pattern.compile("((?:Red|Car)?\\s*(?:or)?\\s*(?:Red|Car)?)"); 
Matcher m = p.matcher(strLine);  // src of text to search

if (m.matches()) {  
    System.out.println(m.group()); // returns index and match
}

出力: -

Car or Red

完全な文字列と 1 回だけ一致させたいため、 yourwhile(b = m.find())をに置き換えます。if (m.matches())

于 2012-11-08T21:47:43.593 に答える
-1

あなたのパターンはRed|Car.

于 2012-11-08T21:51:19.893 に答える