0

私はこれを数時間理解しようとしてきました。あなたの誰かが私を助けてくれることを願っています. いくつかの行と列の間に数字と空白スペースがあるファイル (実際には 2 つですが、それは重要ではありません) があります。そして、BufferedReaderでそれらを読み取ろうとしています。そして、それはうまく機能します。文字列と文字を好きなように印刷できます。しかし、これらの文字列と文字を解析しようとすると、次のエラーが発生します。

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 にあるものを手動で確認しようとしました。0 の場合は 1 を取得しますが、1 の場合は何も取得しません""。では、どうすれば削除でき""ますか?皆さんが私を助けてくれることを願っています。さらに情報が必要な場合はお知らせください。しかし、必要なことはカバーできたと思います。

前もって感謝します :)

ええ、そして別のこと:それを置き換える"""0"うまくいきますが、削除する賢い方法を見つけることができないすべてのゼロを取得します。しかし、解析中などにそれらをスキップすることは可能ですか? 私のファイルは 1 と 2 しか保持していないので、可能であれば何にも干渉しません。

4

2 に答える 2

0

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

于 2012-03-11T22:43:32.180 に答える
0

Scanner クラスを使用して、空白をスキップして int を解析できます。

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

もう 1 つのアイデアは、行を切り取り、分割し、パーツを解析することです。

lin = line.trim ();
String [] words = lin.split (" +");
for (String si : words) 
    Integer.parseInt (si);
于 2012-03-12T00:57:19.220 に答える