使用java正则表达式

Lol*_*lly 0 java regex

我通过将所有空格替换为"_"来转换字符串,如果实际字符串中有"_",我将其转换为"\ _".如果有一个像"this is test _string"这样的字符串结果将是"this_is_test _\_ string",现在我想使用java正则表达式来取回原始字符串"this is test _string".是否可以使用java正则表达式实现?请帮帮我.

Mik*_*uel 7

不,不可能取回原始字符串,因为你没有逃避反斜杠,这使得它不明确是否"\\_"来自"_""\\ ".

如果你做了

  1. 替换所有出现的"\\""\\\\"
  2. 替换所有出现的"_""\\_"
  3. 替换所有出现的" ""_"

那么你可以通过查看令牌逆转这一过程"\\\\","\\_","_"在一个左到右通.

在Java中,第一个转换是

stringToEncode.replace("\\", "\\\\").replace("_", "\\_").replace(" ", "_")
Run Code Online (Sandbox Code Playgroud)

而双重是

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;
}
Run Code Online (Sandbox Code Playgroud)