すべてのスペースを「_」に置き換えて文字列を変換しています。実際の文字列に「_」が含まれている場合は、「\_」に変換しています。「thisistest_string」のような文字列がある場合、結果は「this_is_test _ \ _ string」になります。ここで、javaregexを使用して元の文字列「thisistest_string」を取得します。java正規表現を使用して達成することは可能ですか?私を助けてください。
質問する
110 次
1 に答える
7
いいえ、元の文字列を元に戻すことはできません。バックスラッシュをエスケープしなかったため、から来たのか、から来たのかがあいまいになり"\\_"
ます。"_"
"\\ "
あなたがやったなら
"\\"
のすべての出現をで置き換えます"\\\\"
"_"
のすべての出現をで置き換えます"\\_"
" "
のすべての出現をで置き換えます"_"
次に、左から右への1回のパスでトークン"\\\\"
、、を探すことにより、プロセスを逆にすることができます。"\\_"
"_"
Javaでは、最初の変換は
stringToEncode.replace("\\", "\\\\").replace("_", "\\_").replace(" ", "_")
そしてデュアルは
String decode(String stringToDecode) {
int n = stringToDecode.length();
StringBuilder out = new StringBuilder(n);
int decoded = 0;
for (int i = 0; i < n; ++i) {
switch (stringToDecode.charAt(i)) {
case '\\':
out.append(stringToDecode, decoded, i);
decoded = ++i;
break;
case '_':
out.append(stringToDecode, decoded, i).append(' ');
decoded = i+1;
break;
}
}
return decoded != 0
? out.append(stringToDecode, decoded, n).toString()
: stringToDecode;
}
于 2012-09-13T17:11:31.990 に答える