2012-09-13 38 views
0

我通過將所有空格替換爲「_」來轉換字符串,如果在實際字符串中有「_」,我將它轉換爲「\ _」。如果有一個像「this is test _string」這樣的字符串,結果將是「this_is_test _ \ _ string」,現在我想用java正則表達式來取回原始字符串 「this is test _string」。是否有可能實現使用java正則表達式?請幫助我。使用java正則表達式

+5

[你嘗試過這麼遠嗎?(http://www.whathaveyoutried.com) – Baz

回答

7

不,不可能找回原始字符串,因爲您沒有轉義反斜線,這使得"\\_"來自"_""\\ "不明確。

如果你做了

  1. 替換的"\\"所有出現的"\\\\"
  2. "\\_"
  3. 替換的"_"所有出現的"_"

那麼你可以替換的" "所有出現通過查找令牌來逆轉過程,"\\_""_"在一個單一的從左到右傳遞。

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

我嘗試字符串「這是_test」,我得到的編碼字符串是「this_is _ \\ _ test」,這是例外。但解碼後的字符串是「這是\測試」。這會導致錯誤的字符串。 – Mojoy

+0

@Senthilnathan,是的。解碼不是簡單的交換和輸入反轉,因爲有重疊。將編輯。 –