如何拆分文件中的字符串并读取它们?
我有一个包含信息的文件。 看起来像:
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) { } } } } }
根据您需要做的输入,您可能需要设置不同的选项,文档应该在这里帮助您。