我在下面有这个代码。我想要做的是读取一个文本文件,每行都有由tab分隔的字符串。例如(name \ t country \ t id \ t content)其中\ t是选项卡。然后我只打印每行的第二列。我尝试将整行拆分为令牌,但它只对文件的第一行有效,然后抛出ArrayIndexOutOfBoundsException。当我尝试仅打印第一列(标记[0])而不打印我需要的标记[1]时它也是完美的。所以我需要做什么才能获得每行的第二列?
public static void main(String[] args) throws FileNotFoundException, IOException
{
FileInputStream fis=new FileInputStream("a.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(dis)) ;
String line;
while ((line = br.readLine()) != null)
{
String[] tokens=line.split("\\t");
System.out.println(tokens[1]);
}
fis.close();
}
答案 0 :(得分:1)
如果该行看起来像这样的
asdf\t\t\t
然后你有问题。你应该使用
String[] tokens=line.split("\\t", -1);
请参阅Java: String split(): I want it to include the empty strings at the end
答案 1 :(得分:0)
如果该行中没有选项卡,则会出现异常。
在访问第二个元素之前,你应该检查是否tokens.length()>。
答案 2 :(得分:0)
Java 8:
try (Stream<String> stream = Files.lines(Paths.get("a.txt"))) {
stream.map(line -> line.split("\\t"))
.filter(tokens -> tokens.length > 1)
.forEach(tokens -> System.out.println(tokens[1]));
} catch (IOException e) {
e.printStackTrace();
}