2

これは別の場所で尋ねられた可能性があります。残念ながら、Google で検索するのは非常に困難です。

定期的にプログラミングするとき、私はフォームの構造を見つけます(私は特にJavaの答えを探していますが、一般的な解決策に魅了されます)

String a = getStringFromPlace();
a=processStringInSomeWay(a);
sendStringToSomePlace(a); 

私の問題は、特定の文字「£」を指定すると、processStringInSomeWay(a) が壊れることです。たとえば、これを書くことになります...

String a = getStringFromPlace();
a=a.replace("£","replacevalue");
a=processStringInSomeWay(a);
a=a.replace("replacevalue","£");
sendStringToSomePlace(a); 

しかし、もちろん、'replacevalue' がたまたま入力に含まれていると、これは壊れます。「replacevalue」のばかげた値を選択することもできますが、それは明らかに良い習慣ではありません。この状況でのベストプラクティスは何ですか?

編集 - これは、「processStringInSomeWay()」メソッドを制御できない特定のケースです。また、1 つのユニットとして処理する必要があり、分割できない状況にも興味があります。

4

4 に答える 4

2

あなたの質問は、これらの文字列で何をする必要があるのか​​ を知らなければ、1つの正確な答えを出すことはほとんど不可能であるという意味で、非常に一般的です.

私が見る解決策は次のとおりです。

  • メソッドが処理すべきでない文字を直接削除します (例: replaceAll("£",""))
  • で文字をスキップする処理方法の変更は現在のバージョンでは処理されません
  • 不要な文字が見つかるたびに文字列を分割し、別々に処理します
  • 管理されていないすべてのシンボルに対して常に同じエスケープ シーケンスを配置するだけです (例: replaceAll("£",escape+"£"))

この問題は多くの状況で一般的であり、私が見たところ、エスケープシーケンスとして使用されているために自然に使用できないシーケンスがあると判断するだけで終わることがよくあります。これは、圧縮プロトコル、ネットワーク プロトコル、およびその他の多くの場合に当てはまります。

于 2012-11-27T14:22:21.797 に答える
0

置き換える場合は、現在 Unicode で定義されていない文字を使用してください。

ただし、processStringInSomeWay を変更またはオーバーロードして String[] を取得し、置換する文字で分割し、後で連結します。

于 2012-11-27T14:28:11.947 に答える
0

IMHOベストプラクティスは、processStringInSomeWay(a);壊れないように修正することです。つまり、この回避策は必要ありません。

回避策を使用する必要があると仮定すると、使用できる可能性のある文字はほぼ 65536 あるため、それらの 1 つ (または組み合わせ) を選択できます。

注: 「非文字」として定義されている非文字\uFFFEとが 2 つあります。\uFFFFこれらが有効なテキストに表示されることはないと想定できます。http://en.wikipedia.org/wiki/Mapping_of_Unicode_characters

于 2012-11-27T14:21:21.250 に答える
0

Java については 100% 確信が持てませんが、次のようなことをしていただけないでしょうか。

a=processStringInSomeWay(a.replace("£",""));

変更せずにプロセス関数に渡された文字列から£を削除しますa

于 2012-11-27T15:22:17.150 に答える