2014-01-29 109 views
-1

我的代碼下面一行: string str = "\"\\trandom string\\n\"";如何解析引用字符串

,現在我需要一個方法來獲得: string result = "\trandom string\n";

就像如何與被引用的字符串編譯器的交易。
請注意,字符串str是隨機的,這意味着任何字符,包括'\t','\n','\"'等都可能出現在結果中。我的問題是: 我可以使用C#中的現有方法嗎?如果沒有,你有什麼建議嗎?

編輯:
我要的是:
"\\t" - >'\t'
"\\n" - >'\n'
"\\\\" - >'\\'
等什麼,是不是字面引號內

+3

究竟是什麼你想實現什麼? – rae1

+0

@ rae1我需要腳本爲我的程序 –

+0

所以問題是如何將一個字符串的實例轉換爲其轉義表示? –

回答

0
System.Text.RegularExpressions.Regex.Unescape 
0

最佳時機一個簡單的狀態機。

編輯:爲轉義字符添加第三個狀態,這個狀態機假定你只關心引號中的轉義字符,因爲在任何地方處理轉義字符會有更多狀態,但我認爲這給出了足夠好的構建塊。

//define somewhere in your class 
enum states { NOT_IN_QUOTES, IN_QUOTES, ESCAPE_CHAR } 

//inside a function 
states state = states.NOT_IN_QUOTES; 
string result = ""; 
foreach(char c in str) 
{ 
    switch(state) 
    { 
     case states.NOT_IN_QUOTES: 
      if (c == '\"') 
      { 
       state = states.IN_QUOTES; 
      } 
     break; 
     case states.IN_QUOTES: 
      if (c == '\"') 
      { 
       state = states.NOT_IN_QUOTES; 
      } 
      else if (c == '\\') 
      { 
       state = states.ESCAPE_CHAR; 
      } 
      else 
      { 
        result += c; 
      } 
     break; 
     case states.ESCAPE_CHAR: 
      state = states.IN_QUOTES; 
      result += c; 
     break; 
    } 
} 
return result; 
+0

這隻能處理引號。我需要的是處理諸如「\\ n」之類的東西,這些東西不是引號內的字面意思 –