teq*_*ras 1 java tabs pattern-matching
我有一个文件,其中包含以下行:
string1 (tab) sting2 (tab) string3 (tab) string4
Run Code Online (Sandbox Code Playgroud)
我想从每一行得到string3 ...我现在从行开始就是string3在第二个和第三个制表符之间.是否可以采用类似的模式
Pattern pat = Pattern.compile(".\t.\t.\t.");
Run Code Online (Sandbox Code Playgroud)
听起来你只是想要:
foreach (String line in lines) {
String[] bits = line.split("\t");
if (bits.length != 4) {
// Handle appropriately, probably throwing an exception
// or at least logging and then ignoring the line (using a continue
// statement)
}
String third = bits[2];
// Use...
}
Run Code Online (Sandbox Code Playgroud)
(您可以转义字符串,以便正则表达式引擎必须将反斜杠-t解析为制表符,但您不必.上述工作正常.)
String.split使用正则表达式的内置方法的另一种替代方法是Guava Splitter类.可能没有必要在这里,但值得注意.
编辑:如评论中所述,如果您要重复使用相同的模式,编译单个Pattern并使用更有效Pattern.split:
private static final Pattern TAB_SPLITTER = Pattern.compile("\t");
...
String[] bits = TAB_SPLITTER.split(line);
Run Code Online (Sandbox Code Playgroud)