-1

テキストファイルを1行ずつ読み取り、行を連結して1つの文字列を作成しようとしています。しかし、その統一された文字列を作成している間、0A各行の後に追加されています。文字列自体は1行で0A、通常のテキスト/ Javaエディタでは表示されませんが、16進エディタで開くと、各行の後に「0A」が表示されます。私はLinux(Ubuntu)プラットフォームに取り組んでいます。

私はそれらを削除するために可能な限りのことを試みました、特にJava文字列からキャリッジリターン(HEX 0A)を削除する方法は?

しかし、私はそれらを削除することはできません。これを行う方法について何か考えはありますか?

アップデート:

File workingFolderLocal = new File("src/test/resources/testdata");
String expected = "String1";

MyClass myClass = new MyClass();
myClass.createPopFile(workingFolderLocal);

// Read the created file and compare with expected output
FileInputStream fin = new FileInputStream(workingFolderLocal + "/output.xyz");
BufferedReader myInput = new BufferedReader(new InputStreamReader(fin));
StringBuilder actual = new StringBuilder("");
String temp = "";
while ((temp = myInput.readLine()) != null) {
    String newTemp = temp.replaceAll("\r", "");
    actual.append(newTemp);
}
System.out.println("actual: " + actual.toString());
myInput.close();

Assert.assertEquals(expected, actual);

これが私が得ている出力/エラーです:

actual: String1
FAILED: testCreatPopFile
junit.framework.AssertionFailedError: expected:<String1> but was:<String1>
    at junit.framework.Assert.fail(Assert.java:47)
    at junit.framework.Assert.failNotEquals(Assert.java:277)
    at junit.framework.Assert.assertEquals(Assert.java:64)
    at junit.framework.Assert.assertEquals(Assert.java:71)
4

3 に答える 3

2

expected変数のタイプはですが、変数Stringのタイプはです。これらのオブジェクトは、本質的に等しくなることはありません...actualStringBuilder

Assert.assertEquals(expected, actual);

、タイプが異なるためです。

于 2013-01-17T20:02:22.370 に答える
1

'0A'は改行文字( "\ n")です。キャリッジリターン文字( "\ r")(0D)のみを削除しています。「\r」を置き換えるのと同じ方法で、「\n」も置き換えてみてください。誰かがコメントしたように、readline()呼び出しはそれを処理する必要があります。

Windowsでは、行は両方で終了します\ r \ n*nix行では\nのみで終了します

改行を見る

于 2013-01-17T18:31:17.477 に答える
1

アサーションでは、stringbuilderなのでactual.toStringを使用する必要がありますか?

答えを受け入れるためにコメントからこれを追加しました。

@oheyderもこれに出くわしました。彼に+1を与えた。

于 2013-01-17T20:27:14.583 に答える