我有一个包含数千条记录的文件,我需要根据每行的第 8 个字符过滤它们。在我的例子中,如果第 8 个字符是 [a 或 A],我想提取该行并保存到一个新文件中。
我刚刚将一个简单的 Java 应用程序与 3 个项目 2 放在一起,其中有我想要的数据“第一个和第三个”,我正在打印到控制台,但我的匹配器不工作。
我的代码示例:
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ValidateDemo {
public static void main(String[] args) {
String pattern = "^.{7}([aA]{1})";
// Create a Pattern object
Pattern p = Pattern.compile(pattern);
List<String> input = new ArrayList<String>();
input.add("CARHALAALondon GB W");
input.add("T(U LRFonhai CN E");
input.add("A$F LAMuguni VE E");
for (String ssn : input) {
System.out.println(p + " -> " +ssn);
if (p.matcher(ssn).matches()){
System.out.println("Match: " + ssn);
}
}
}
}
输出:
^.{7}([aA]{1}) -> CARHALAALondon GB United Kingdom W
^.{7}([aA]{1}) -> T(U LRFonhai CN China E
^.{7}([aA]{1}) -> A$F LAMuguni VE Venezuela E
如您所见,它只打印出第一个 SYSO,任何人都知道我如何才能实现我想要做的事情。
谢谢
G
最佳答案
你快到了 - Matcher::matches
attempts to match the whole string .
这个模式应该做你想做的:
String pattern = "^.{7}[aA].*";
或者(更简单、更高效):
for (String ssn : input) {
char eighth = ssn.charAt(7);
if (eighth == 'a' || eighth == 'A') {
System.out.println("Match: " + ssn);
}
}
关于Java RegEx 检查行的第 8 个字符是否为 A,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34884653/