我有一个文本文件,我迭代并希望检查每一行中的多个子字符串(每行有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);
}
}
我找不到我的字符串。
代码编译和运行完美。我遍历文件,但我找不到我的结果。
我可以帮忙解决一下我做错了什么吗?
答案 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());
}
}
查找与整个字符串不匹配,因此我使用^
来匹配输入的开头。