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文件。提前致谢。
答案 0 :(得分:2)
将鼠标悬停在这段代码上时收到的消息:
这一行"\"
:
if (data[i] == "\" && data[i-1] == "\")
实际上不是错误,而是类String
的注释/描述。
反斜杠用于表示escape sequence。文档告诉:
由反斜杠(\)后跟字母或数字组合组成的字符组合称为&#34;转义序列。&#34;要表示换行符,单引号或字符常量中的某些其他字符,必须使用转义序列。转义序列被视为单个字符,因此有效作为字符常量。
出现混淆是因为当您使用"
时,编译器认为您希望将\"
作为字符串中的字符。这就是为什么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(@"\\", @"\ \");