1

Javaでマッチャーを使用して正規表現で行から2つの単語を抽出しようとしています私の行はBROWSER = Firefoxのようになります

以下のコードを使用しています

currentLine = currentLine.trim();
System.out.println("Current Line: "+ currentLine);
Pattern p = Pattern.compile("(.*?)=(.*)");
Matcher m = p1.matcher(currentLine);
if(m.find(1) && m.find(2)){
System.out.println("Key: "+m.group(1)+" Value: "+m.group(2));
}

私が得る出力はキーです: OWSER 値: FireFox

私の場合、BRはトリミングされています。これは PERL で完全に動作するため、なぜこのように動作するのかを知るまでは、私には奇妙に思えます。誰かが私を助けることができますか?

4

2 に答える 2

2

呼び出すm.find(2)と、最初の 2 文字が取り除かれます。JavaDocs から(太字は私のものです):

public boolean find(int start)

このマッチャーをリセットし、指定されたインデックスから開始して、パターンに一致する入力シーケンスの次のサブシーケンスを見つけようとします。

したがって、次のように使用しますm.find()

String currentLine = "BROWSER=FireFox";
System.out.println("Current Line: "+ currentLine);
Pattern p = Pattern.compile("(.*?)=(.*)");
Matcher m = p.matcher(currentLine);
if (m.find()) {
    System.out.println("Key: "+m.group(1)+" Value: "+m.group(2));
}

出力:

Current Line: BROWSER=FireFox
Key: BROWSER Value: FireFox

ここでオンライン デモを参照してください。

于 2013-07-27T00:07:08.017 に答える
0

String.indexOfを使用して の場所を見つけ、=次にString.substringを使用して 2 つの値を取得できます。

String currentLine = "BROWSER=Firefox";

int indexOfEq = currentLine.indexOf('=');

String myKey = currentLine.substring(0, indexOfEq);
String myVal = currentLine.substring(indexOfEq + 1);

System.out.println(myKey + ":" + myVal);
于 2013-07-27T00:05:25.933 に答える