如何拆分文件中的字符串并读取它们?

我有一个包含信息的文件。 看起来像:

Michael 19 180 Miami George 25 176 Washington William 43 188 Seattle 

我想分割线条和字符串并阅读它们。 我希望它看起来像:

  Michael 19 180 Miami George ... 

我使用了这样的代码:

  BufferedReader in = null; String read; int linenum; try{ in = new BufferedReader(new FileReader("fileeditor.txt")); } catch (FileNotFoundException e) {System.out.println("There was a problem: " + e);} try{ for (linenum = 0; linenum<100; linenum++){ read = in.readLine(); if(read == null){} else{ String[] splited = read.split("\\s+"); System.out.println(splited[linenum]); } } } catch (IOException e) {System.out.println("There was a problem: " + e);} } 

这给了我什么

  Michael 25 188 

我认为它可能是我的for循环的一个问题,但我在编程方面不是很先进,我会很感激帮助。 谢谢。

你在那里很有意义。

当读取文件时, Reader将在到达流的末尾时返回null ,这意味着没有其他内容可供读取。 您当前的方法意味着您想要读取至少100行,但不会更多…如果文件大小增加,这将在将来成为问题…它也有点浪费

相反,我们应该使用null值指示文件结尾的事实。

拆分线时,它将包含许多元素。 您正在使用linenum变量来打印这些。 问题是,你已经阅读并分割了这一行, linenum与此任务无关,因为它代表你已经读过的行数,而不是你刚刚拆分的字符串部分。

相反,您需要使用内部循环来显示每行的各个拆分元素……

例如…

 BufferedReader in = null; try { in = new BufferedReader(new FileReader("fileeditor.txt")); String read = null; while ((read = in.readLine()) != null) { String[] splited = read.split("\\s+"); for (String part : splited) { System.out.println(part); } } } catch (IOException e) { System.out.println("There was a problem: " + e); e.printStackTrace(); } finally { try { in.close(); } catch (Exception e) { } } 

另外,不要忘记,如果你打开它,你必须关闭它;)

您可能还需要花费更多时间来完成基本I / O ;)

  String[] splited = read.split("\\s+"); for (int i= 0; i 

分割字符串后应循环结果。

您可以使用StreamTokenizer 。 它会根据设置将流分割为令牌。 根据您的问题,我认为您希望将行结尾视为标记分隔符。 代码如下所示:

 import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.io.StreamTokenizer; public class ReaderSample { public static void main(String[] args) { BufferedReader in = null; try { in = new BufferedReader(new FileReader("fileeditor.txt")); StreamTokenizer st = new StreamTokenizer(in); st.eolIsSignificant(false); // remove comment handling st.slashSlashComments(false); st.slashStarComments(false); while(st.nextToken() != StreamTokenizer.TT_EOF) { if (st.ttype == StreamTokenizer.TT_NUMBER) { // the default is to treat numbers differently than words // also the numbers are doubles System.out.println((int)st.nval); } else { System.out.println(st.sval); } } } catch(IOException ex) { System.err.println(ex.getMessage()); } finally { if (in != null) { try { in.close(); } catch (IOException ex) { } } } } } 

根据您需要做的输入,您可能需要设置不同的选项,文档应该在这里帮助您。