2017-11-15 8 views
-4

文字列の各行の最初の文字を大文字にする関数を書いています。したがって、次の入力:なぜSystem.lineSeparator()で文字列がJavaのEclipseで等しくないのですか

String test="this is a test" + System.lineSeparator() + 
        "write some words" + System.lineSeparator() + 
        "and sentences"; 

出力は次のようになります。

String expected="This is a test" + System.lineSeparator() + 
        "Write some words" + System.lineSeparator()+ 
      "And sentences"; 

しかし、私は、Eclipseで実行したとき。出力は次のとおりです。

This is a test[ 
Write some words] 
And sentences 

そのバイト:

54686973206973206120746573740a577269746520736f6d6520776f726473416e642073656e74656e636573 

Eclipseで予想される文字列は次のとおりです。

This is a test[ 
Write some words 
] 
And sentences 

そのバイト:

54686973206973206120746573740d0a577269746520736f6d6520776f7264730d0a416e642073656e74656e636573 

ので、2つの文字列ではありません等しい。私はオンラインのJavaコンパイラでいくつかのコードを実行し、2つの文字列は等しい。

lineSeparator()に対応するように特定のシステムコマンドを設定し、2つの文字列(出力と期待値)を等しくする必要があるのでしょうか?

ありがとうございます。

+0

あなたの質問が明確ではないが、あなたの問題は何ですか?あなたは何を達成しようとしていますか? –

+0

ようこそ。お手数ですが[質問の仕方](https://stackoverflow.com/help/how-to-ask)をご覧ください。現在のところ、適切な解決策を導き出すために十分な情報を提供していません。 – yacc

+0

実行コンフィギュレーションに、 'line.separator = \ n'のようなVM引数が含まれている可能性があります(実行コンフィギュレーションの_Arguments_タブを参照)。 – howlger

答えて

0

あなたが解決しなければならない問題は、実際にはEclipseではありません。コードは、プラットフォームに依存しないように記述する必要があります。しばしば改行(;;「\ nを」「0A」NL)と呼ばれる、あなたのコマンドライン/ Linux環境の場合は、行区切りは改行(LF)である

。 Eclipse/Windows/DOSの場合、セパレータは改行、改行(CRLF; "\ r \ n"; {'0d'、 '0a'})です。

16進数の出力に基づいて、Eclipseの区切り文字は確かにCRLFであり、編集した文字列にはLFしかありません。つまり、テスト文字列のCRLFをLFに間違って変更するようなことをしています。

たとえば、テスト文字列を複数の文字列に分割し、「\ n」で編集した文字列を作成することができます。例えばstr1 + "\ n" + str2 - または - String.format( "%s \ n%s"、str1、str2)。代わりに、System.LineSeperator()で構築する必要があります。例えばString.format( "%s%s%s"、str1、System.LineSeperator()、str2)。

私が前に述べたように、Eclipseの動作を本当に変更したい場合は、hereとお勧めします。


REFERENCE: 私たちは、あなたのコードが更新されたテキストを作成するために使用される表示されません。しかし、あなたは2つの文字列のバイトをダンプして、それらがどのように違うかを調べるかもしれません。 また見てくださいhere

たとえば、Eclipseではキャリッジリターンとラインフィードが表示されます。


    false 
    4162630a446566 
    4162630d0a446566 


    public static void main(String args[]) 
    { 
     String s = "Abc\nDef"; 
     String t = "Abc"+System.lineSeparator()+"Def"; 
     System.out.println(s.equals(t)); 
     System.out.println(hexStr(s.getBytes())); 
     System.out.println((hexStr(t.getBytes()))); 
    } 
    static String hexStr(byte[] bytes) { 
     try (Formatter formatter = new Formatter()) { 
      for (byte b : bytes) formatter.format("%02x", b); 
      return formatter.toString(); 
     } 
    } 

+0

ご意見ありがとうございます。私は今質問のバイトを更新しました。 – kaneroy

+0

あなたの予想文字列には、私が期待しているように、キャリッジリターン(0d)と改行(0a)があります。編集した文字列に改行(0a)しかありません。したがって、編集された文字列を作成する方法は、lineSeparatorsを別の方法で処理するように見えます。編集文字列の処理方法の詳細はありますか? – robertf

+0

はい、それは私が見つけたものです(私のEclipseはlineSeparatorsを別々に扱うかもしれません)。私が文字列を処理する方法は非常に簡単です:テスト文字列のために、私は行単位で読み込みます。各行について、最初の文字を大文字にします。申し訳ありませんが、これは宿題であるため、ここにすべてのコードを貼り付けることはできません。ご協力いただきありがとうございます! – kaneroy

関連する問題