2012-09-13 112 views
0

我有一個場景,正如我需要到指定字符串的開頭和末尾的特殊詞追加。也使用這個詞並檢索實際的字符串。需要一些邏輯來實現

例如,如果給定的字符串是測試字符串,然後後,我需要像形成

START_TEST_STRING_END

串並使用相同的檢索測試字符串。基本規則是將START_和_END添加到字符串並用「_」替換空格。它適用於簡單的字符串,如上面提到的示例但是,如果我在字符串有「_」本身,像給定的字符串本身TEST_STRING然後,形成如 START_TEST_STRING_END後,我得TEST_STRING。

解決方案我想是取代「_」與「__」,然後再轉換。像START_TEST__STRING_END,然後 如果有兩個「_」讓不將其轉換爲空間和修剪第一和最後一個部分,以獲得實際的字符串。但是如果字符串是TEST _STRING,這個邏輯就會失敗。請幫我做一些約定,根據添加START_和_END在開始和結束,取而代之的空間_和檢索實際字符串字符串轉換。

回答

1

不要重新發明輪子,只需使用轉義字符。與往常一樣反斜槓(\)是最好的選擇。

  1. 用下劃線替換空間。
  2. 使用\_代表真正的下劃線。
  3. 使用\\來表示一個反斜槓字符。
1

嘗試以此爲出發點(使用@Crozin recomendation使用\

public class Translator { 


    private static final String prefix = "START_"; 
    private static final String suffix = "_END"; 
    private static final String escape = "\\"; 

    public String encode(String s){ 
     return prefix + s.replace("\\","\\\\").replace("_", escape +"_").replace(' ', '_') + suffix; 
    } 

    public String decode(String s){ 
     String step1 = s.substring(prefix.length()); 
     String step2 = step1.substring(0, step1.length() - suffix.length()); 
     return step2.replace("\\\\", "\\").replace(escape + "_","+").replace('_', ' ').replace('+', '_'); 
    } 


    public static void main(String[] args) { 
      check("TEST STRING"); 
      check("TEST_STRING"); 
      check("TEST _STRING"); 
      check("TEST\\STRING"); 
      check("TEST\\_STRING"); 
    } 


    private static void check(String s1){ 
     Translator t = new Translator(); 
     String s2 = t.encode(s1); 
     boolean status = s1.equalsIgnoreCase(s1); 
     System.out.println(s1 + " >> " + s2 + " >> " + t.decode(s2) + " = " + status); 
    } 
}