0

すべてのスペースを「_」に置き換えて文字列を変換しています。実際の文字列に「_」が含まれている場合は、「\_」に変換しています。「thisistest_string」のような文字列がある場合、結果は「this_is_test _ \ _ string」になります。ここで、javaregexを使用して元の文字列「thisistest_string」を取得します。java正規表現を使用して達成することは可能ですか?私を助けてください。

4

1 に答える 1

7

いいえ、元の文字列を元に戻すことはできません。バックスラッシュをエスケープしなかったため、から来たのか、から来たのかがあいまいになり"\\_"ます。"_""\\ "

あなたがやったなら

  1. "\\"のすべての出現をで置き換えます"\\\\"
  2. "_"のすべての出現をで置き換えます"\\_"
  3. " "のすべての出現をで置き換えます"_"

次に、左から右への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 に答える