具有转义字符的子字符串的奇怪IndexOf()行为

use*_*694 0 c# substring indexof

我试图在一个大字符串中找到字符串"\ r \n"(基本上换行和返回)的所有索引.

我需要这样做,因为我必须逐行将大字符串写入PDF文件(我必须在写完前一行后调用我正在使用的dll的换行符API).

这是代码的简短版本: -

    string fileContents = "abc\r\n\r\ndef\r\nghi";

    int pos = -1; 

    int start = 0;

    while ((pos = fileContents.IndexOf("\r\n", start)) != -1)
    {
        //extract string
        //write string to PDF
        //call newline API

        start = pos + 1;

    }
Run Code Online (Sandbox Code Playgroud)

fileContents变量中"\ r \n"的预期位置是3,7和14.但是,在调试代码时,pos变量中的值是3,5和10.

我的indexOf()调用似乎有什么问题?

Tec*_*ter 5

\n 或任何其他特殊字符是特殊字符....这意味着即使你用2个字符写它们,它实际上只有1个字符:

"ABC\r \n\r\NDEF\r \宜安"

 0 : a
 1 : b
 2 : c
 3 : \r
 4 : \n
 5 : \r
 6 : \n
 7 : d
 8 : e
 9 : f
 10: \r
 11: \n
 ...
Run Code Online (Sandbox Code Playgroud)