情報が入ったファイルがあります。次のようになります。
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<splited.length; i++){
System.out.println(splited[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) {
}
}
}
}
}
さまざまなオプションを設定する必要があるかもしれない入力で何をする必要があるかに応じて、ドキュメントはここであなたを助けるはずです。