4

文字列から削除する必要が\あります。

私のストリングは"SEPIMOCO EUROPE\119"

replace、を試しましたがindexOf、この文字列からこれPatternを削除できません\

String strconst="SEPIMOCO EUROPE\119";
System.out.println(strconst.replace("\\", " ")); // Gives SEPIMOCO EUROPE 9
System.out.println(strconst.replace("\\\\", " ")); // Gives SEPIMOCO EUROPE 9
System.out.println(strconst.indexOf("\\",0));  //Gives -1

これに対する解決策はありますか?

4

3 に答える 3

10

文字列に実際にはバックスラッシュが含まれていません。この部分: "\11" は8 進数のエスケープ シーケンスとして扱われます(実際にはタブ - U+0009 です)。本当にバックスラッシュが必要な場合は、次のものが必要です。

String strconst="SEPIMOCO EUROPE\\119";

入力データをどこから取得しているのか、何を達成しようとしているのかは明確ではありませんが、現時点で見ていることはすべて説明しています。

于 2012-09-20T11:21:56.133 に答える
5

文字列リテラル、つまりソース コードに記述した二重引用符で囲まれたものと、それが表す文字列値を区別する必要があります。前者を後者に変えると、エスケープシーケンスが解釈され、これら2つの違いが生じます。

文字列リテラルからのストリッピング

\11リテラルの in は、実際の文字列値で 8 進値を持つ文字11、つまりタブ文字を表します。\11と同等\tです。

文字列リテラルのエスケープ バージョンを確実に取得する方法はありません。\11つまり、ソース コードにまたはが含まれているかどうかを知ることはできません\t。その情報がクラス ファイルに存在しないためです。したがって、シーケンスからバックスラッシュを「削除」したい場合、正しい置換であったかどう11かがわかりません。t

このため、バックスラッシュが不要な場合は含めないようにするか、リテラルでもエスケープして適切なバックスラッシュを含めるように、文字列リテラルを修正する必要があります。文字列リテラルのin は、それが表現する文字列に\\シングルを与えます。\

ランタイム文字列

他の回答へのコメントは、実行時に実際にこの文字列を受け取っていることを示しているため、文字列にはタブ文字ではなく実際のバックスラッシュが含まれていると予想されます。エスケープ シーケンスを解析する高度な入力方法を使用しない限り、生のバックスラッシュがそのまま残ります。コードのテストでその状況をシミュレートするには、文字列に実際のバックスラッシュを含める必要があります。つまり、\\文字列リテラルに二重のバックスラッシュを含める必要があります。

文字列に実際のバックスラッシュがある場合は、strconst.replace("\\", " ")やりたいことを行う必要があります。

String strconst="SEPIMOCO EUROPE\\119";
System.out.println(strconst.replace("\\", " ")); // Gives SEPIMOCO EUROPE 119
于 2012-09-20T11:22:09.267 に答える
1

あなたの弦はどこから来たのですか?例のように宣言すると、そこにあるバックスラッシュの前に別のエスケープ バックスラッシュを追加する必要があります。

于 2012-09-20T11:22:58.740 に答える