使用java正则表达式

时间:2012-09-13 17:09:09

标签: java regex

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

1 个答案:

答案 0 :(得分:7)

不,不可能取回原始字符串,因为您没有转义反斜杠,这使得"\\_"来自"_""\\ "时不明确。

如果你已经完成了

  1. 将所有"\\"替换为"\\\\"
  2. 将所有"_"替换为"\\_"
  3. 将所有" "替换为"_"
  4. 然后您可以通过从左到右单个传递中查找令牌"\\\\""\\_""_"来反转该过程。

    在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;
    }