2016-08-03 139 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(@"\\", @"\ \");