2012-03-11 12 views
0

私はこれを数時間にわたって把握しようとしています。あなたのうちの一人が私を助けてくれることを願っています。私は数字と空白の間にいくつかの行と列を持つファイル(実際は2つですが重要ではありません)を持っています。そして、私はBufferedReaderでそれらを読むことを試みています。それは素晴らしい作品です。私は文字列を&の文字で印刷することができます。私は次のエラーを取得するこれらの文字列と文字を解析しようとすると、しかし:私はグーグルで見つけたものだと思いファイルからintに文字列を解析しようとしています。 Get NumberFormatException:入力文字列: ""の場合、文字列は良好なint文字列であるように見えます。 Java

Exception in thread "main" java.lang.NumberFormatException: For input string: "" 
at java.lang.NumberFormatException.forInputString(Unknown Source) 
at java.lang.Integer.parseInt(Unknown Source) 
at java.lang.Integer.parseInt(Unknown Source) 
at FileProcess.processed(FileProcess.java:30) 
at DecisionTree.main(DecisionTree.java:16) 

からのエラーは、私は私のファイルを読み込む方法にあります。

public class ReadFiles { 
private BufferedReader read; 
public ReadFiles(BufferedReader startRead) { 
    read = startRead; 
} 

public String readFiles() throws IOException { 
    try { 
     String readLine = read.readLine().trim(); 
     String readStuff = ""; 
     while(readLine != null) { 
      readStuff += (readLine + "\n"); 
      readLine = read.readLine(); 
     } 
      return readStuff; 
    } 
    catch(NumberFormatException e) { 
     return null; 
    } 
} 

と解析ビット用

public class FileProcess { 

public String processed() throws IOException { 
fileSelect fs = new fileSelect(); 
ReadFiles tr = new ReadFiles(fs.traning()); 
String training = tr.readFiles(); 

ReadFiles ts = new ReadFiles(fs.test()); 
String test = ts.readFiles(); 
List liste = new List(14,test.length()); 

String[] test2 = test.split("\n"); 

for(int i = 0; i<test2[0].length(); i++) {  
    char tmp = test.charAt(i); 
    String S = Character.toString(tmp).trim(); 

    //int i1 = Integer.parseInt(S); 

    System.out.print(S);   
} 

これは私が出力をどうする計画を何のため実際のコードではありませんが、エラーがコメントアウトされているコードで表示されます。だから、私の文字列の出力は次のようになります:

12112211 

整数に解析するのは良いようです。しかし、それは動作しません。私は手動で0と1のchar位置にあるものを手動で表示しようとしましたが、0の場合は1が、1の場合は""と表示されません。どうすれば""を削除できますか?私はあなたが私を助けてくれることを願っています、そしてあなたがもっと情報を必要としているかどうか私に知らせてください。しかし、私は必要なものをカバーしていると思います。

事前に感謝:)

うん、と別の事:私は"0"""を交換した場合、それは動作しますが、その後、私は削除する巧妙な方法を見つけることができないすべてのそれらのゼロを取得します。しかし、多分解析や何かの間にそれらをスキップすることは可能ですか?私のファイルは1と2だけを保持しているので、可能ならば何も妨げません。

+0

あなたのファイルの最初の行では、その1文字からなる文字列を作成し、文字列を "トリム"します(先頭と末尾の空白を削除します: '' "または' 't '' ' "")、その文字列を整数として解析します。文字列が空であるという例外が発生した場合、これはファイルの最初の行のどこかに空白文字があることを意味します。解決策は - ファイルの最初の行に空白文字がないことです。 – ruakh

+0

最初の行の空白でこれを行うことは不可能だと言っていますか?私が得たファイルは宿題のためであり、私はそれらを編集できるとは思っていません。/ – dtd

+0

私はあなたの現在のコード*は最初の行に空白があるとうまくいかないと言っています。 (あなたのファイルの最初の行のどこにでも空白文字を入れないようにしていると言ったときは、それほど深刻ではありませんでしたが、実際には、なぜあなたのプログラムが失敗したのかを理解する必要があります。私の説明を理解していますか?そして、第二に、サポートする必要のあるデータをサポートするためにプログラムを変更することです。) – ruakh

答えて

0

2つの分割文字が隣り合っている場合(つまり\ n \ n)、またはtrim()呼び出しに空白文字が渡されて空の文字列を無視した場合、文字列 ""が返されます。続ける。

+0

あなたは誤解していると思います。 'parseInt'は' split'が返す配列の最初の要素の1文字の部分文字列に対してのみ呼び出されます。 'split'の戻り値に空文字列が含まれている場合は問題ありません。 – ruakh

+0

しかし、trim()はスペースやタブ、または\ rを空の文字列に再び変更します –

+0

はい、私はそれを認識していますが、それはあなたの答えが何であったかではありません。そしてあなたの答えは、その可能性と同時に不可能と言います。 – ruakh

0

あなたは空白をスキップし、int型のために解析するScannerクラスを使用することができます。

sc = new java.util.Scanner (line); 
sc.nextInt(); 

もう一つのアイデアは、ライン、スプリットをトリム、および部品を解析することです:の各文字については

lin = line.trim(); 
String [] words = lin.split (" +"); 
for (String si : words) 
    Integer.parseInt (si); 
関連する問題