1

我正在尝试使用 Java 中的匹配器从带有正则表达式的行中提取两个单词我的行是这样的,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));
}

我得到的输出是 Key: OWSER Value: FireFox

就我而言,BR 正在削减。这对我来说似乎很奇怪,直到我知道它为什么会这样,因为这与 PERL 完美配合。有人能帮我吗?

4

2 回答 2

2

当你调用m.find(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来获取您的两个值:

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 回答