0

String次のプログラムは、 「ハンプティダンプティが壁に座っていた、\nハンプティダンプティが大きく落ちた」と印刷する必要があります。ファイルに入力して戻します。

package io;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintStream;

public class ByteIO {

    /**
     * @param args
     */
    public static void main(String[] args) {
        String output = "Humpty Dumpty sat on a wall,\n Humpty Dumpty had a great fall.";
        System.out.println("Output String : " + output);
        try(PrintStream out = new PrintStream("F:\\Test.txt")) {
            out.println(output);
        } catch(FileNotFoundException e) {
            e.printStackTrace();
        }

        String input = "";
        try(FileInputStream in = new FileInputStream("F:\\Test.txt")) {
            while(in.read() != -1)
                input += (char)in.read();
        } catch(FileNotFoundException e) {
            e.printStackTrace();
        } catch(IOException e) {
            e.printStackTrace();
        }
        System.out.println("Input String : " + input);
    }
}

しかし、String私が得たのFileInputStreamは「upyDmt a nawl、upyDmt a ra al?」でした!また、ファイル「Test.txt」を開くと、出力Stringが「ハンプティダンプティが壁に座っていた、ハンプティダンプティが大きく落ちた」になっていることがわかりました。一行で。どこへ行ったの\n

4

4 に答える 4

4

in.read()あなたは2回電話しています:

while(in.read() != -1)
    input += (char)in.read();

これにより、反復ごとに1文字ではなく2文字が読み取られるため、毎回1文字を効果的に破棄できます。

文字をwhile条件で保存してから、その文字をinput:に追加してみてください。

編集:JavaNewbie_M107のコメントに基づく

int i;    
while((i = in.read()) != -1)
   input += (char)i;
于 2012-12-18T14:27:41.487 に答える
1

2番目の部分では、Windows(およびメモ帳などの多くのアプリケーション)は\nを改行として認識しません。Windowsでは、\ r\nは改行をマークします。より本格的な編集プログラム(ワードパッドで十分です)で開いてみてください。正しくフォーマットされていることがわかります。

于 2012-12-18T14:28:35.060 に答える
0

ハンターが言ったように、あなたはあなたのコードをこれに変える必要があります

char c;
while((c=in.read()) != -1)
input += c;
于 2012-12-18T14:29:30.430 に答える
0

これは私の問題の正しい解決策です:

int i = 0;
char c;
    do {
        c = (char)i;
        input += c;
        i = in.read();
    } while(i != -1);

前面の余分なスペースは、.trim()メソッドを使用して削除されます。

于 2012-12-20T10:58:26.157 に答える