一个字符串中的正则表达式多个字符串

时间:2012-11-25 02:42:21

标签: java regex

我有一个文本文件,我迭代并希望检查每一行中的多个子字符串(每行有1个子字符串)。

我的正则表达式如下

String rE = "(AGG|TIP|IDV|DVY|IYR|LQD|HYG|EMB|ACWI|ACWX|EFA|SCZ|EEM|IWB|IWF|IWD|IWM|IWO|IWN|IWV|IVV|IVW|IVE|IJH|IJK|IJJ|MUB|IJR|IJS|IJT|SPY)"

我的文本文件的一行如下所示:

SPY,6696832,31080,140.7,400,140.69,140.69,6396960,299872

当我这样做时:

BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
System.out.println("Starting");
while ((retStr = in.readLine()) != null) {
    if(retStr.matches(tickers)){
         System.out.println(retStr);
    }
}

我找不到我的字符串。

代码编译和运行完美。我遍历文件,但我找不到我的结果。

我可以帮忙解决一下我做错了什么吗?

2 个答案:

答案 0 :(得分:1)

只需将.*添加到正则表达式的末尾(.*匹配任何内容):

String rE = "(AGG|TIP|IDV|DVY|IYR|LQD|HYG|EMB|ACWI|ACWX|EFA|SCZ|EEM|" +
     "IWB|IWF|IWD|IWM|IWO|IWN|IWV|IVV|IVW|IVE|IJH|IJK|IJJ|MUB|IJR|IJS|IJT|SPY).*"

答案 1 :(得分:1)

为了获得更好的性能,您应该编译正则表达式。 String上的matches方法每次重新编译表达式,它不应该在循环中使用。

这是一个例子

import static org.junit.Assert.assertEquals;
import java.util.regex.Pattern;
import org.junit.Test;

public class Example {

    @Test
    public void shouldMatchString() {
        Pattern p = Pattern.compile("^(AAA|BBB|CCC)");
        assertEquals(true, p.matcher("AAA,1,2,3,4,5").find());
        assertEquals(false, p.matcher("    AAA").find());
    }

}

查找与整个字符串不匹配,因此我使用^来匹配输入的开头。