2016-08-03 32 views
1
StringBuilder builder = new StringBuilder(); 
builder.Append(" \(Nested \(parentheses\) dont need a backslash.\) \(But a single \\(parenthe)"); 
for(int i=0;i<builder.Length;i++) 
{ 
    if(data[i] == "\" && data[i-1] == "\") 
     data[i] += " "; 
} 

如果字符串中存在兩個反斜槓。我需要在它們之間添加一個空格。在上面的代碼中,如果出現條件,我會收到錯誤「代表一個字符作爲utf-16代碼單元」。因爲使用這個,我正在創建一個PDF文件。提前致謝。表示作爲utf-16代碼單元的字符

+0

你的代碼甚至不會編譯。 '\'表示轉義序列,'\「'實際上是雙引號轉義的方式。由於問題本身的語法着色顯示,'」\「&& data [i-1] ==」'實際上是一個單獨的串 –

回答

1

與鼠標移到該代碼段徘徊,當你得到消息: "\"在這一行:

if (data[i] == "\" && data[i-1] == "\") 

實際上不是一個錯誤,但類String的意見/描述。使用反斜槓表示escape sequence。該文檔告訴:

由反斜槓(\)後跟字母或數字組合組成的字符組合稱爲「轉義序列」。要表示換行符,單引號或字符常量中的某些其他字符,必須使用轉義序列。轉義序列被視爲單個字符,因此作爲字符常量有效。

產生了困惑,因爲編譯器會認爲你想有"作爲一個字符在字符串中當您使用\"。這就是爲什麼intellisense仍然以string的顏色標記該行的其餘部分,直到找到在其前面沒有反斜槓的"

可以使用@操作,迫使該字符串被解釋爲是,那麼反斜槓將成爲又一個字符:

if (data[i] == @"\" && data[i-1] == @"\") 

並且代碼編譯。

不幸的是,當i爲0時,您的循環會在第一次迭代中斷裂。因爲data將不可索引-1。 如果你的問題是在兩個連續的反斜槓之間放一個空格,我會建議一種不同的方法。

你可以使用簡單的方法Replace像這樣:

string s = @"\(Nested \(parentheses\) dont need a backslash.\) \(But a single \\(parenthe)"; 

s = s.Replace(@"\\", @"\ \"); 

我不太明白data陣列在代碼中扮演哪個角色,但你也可以使用StringBuilder

StringBuilder builder = new StringBuilder(); 
builder.Append(@" \(Nested \(parentheses\) dont need a backslash.\) \(But a single \\(parenthe)"); 

builder.Replace(@"\\", @"\ \");