我该如何在字符串中搜索换行符?以下两种方法似乎都返回-1....!
theJ = line.IndexOf(Environment.NewLine);
或者
theJ = line.IndexOf('\n');
它搜索的字符串是“yo\n”,我正在解析的字符串包含“printf(”yo\n“); ”,在比较过程中看到的字符串是这样的:“\tprintf(\”yo \n \“);”。
"yo\n" // output as "yo" + newline
"yo\n".IndexOf('\n') // returns 2
"yo\\n" // output as "yo\n"
"yo\\n".IndexOf('\n') // returns -1
你确定要搜索的是yo\n
,而不是yo\\n
吗?
根据你的更新,我可以看出我的猜测是正确的。如果您的字符串如下:
printf("yo\n");
如果没有换行符,则此处不包含换行符。如果有,它将看起来像这样:
printf("yo
");
line.IndexOf("\\n")
例如:
"\tprintf(\"yo\\n\");" // output as " printf("yo\n");"
"\tprintf(\"yo\\n\");".IndexOf("\\n") // returns 11
看起来你的行不包含换行符。
如果你在使用File.ReadAllLines
或者string.Split
函数时按照换行符进行分割,那么返回的数组中每一行都不会包含换行符。如果你在使用StreamReader
或者继承自它的类,则ReadLine
方法会返回不带有换行符的字符串。
string lotsOfLines = @"one
two
three";
string[] lines = lotsOfLines.Split('\n');
foreach(string line in lines)
{
Console.WriteLine(line.IndexOf('\n'); // prints -1 three times
}
\n
。或者,如果包含,那么它不是\n
。你怎么知道它包含一个换行符?你从哪里获取这个字符串?你能贴出那段代码吗? - Oded\
,因为调试器可视化工具会显示 \\
。所以你有一个转义的反斜杠后面跟着一个 n
,而不是一个换行符。我再问一遍 - 你是怎么得到这个字符串的? - Oded虽然在Windows系统中,您需要搜索“\r\n”,但这应该可以运行。
-1的含义是未找到换行符。
//Text from TextBox
var text = textBox1.Text;
//Create an array with the text between the carriage returns
var references = text.Split(new string[] { "\r\n", "\r" }, StringSplitOptions.RemoveEmptyEntries);
//Simple OrderBy(Alphabetical)
var ordered = references.ToList<string>().OrderBy(ff => ff);
//Return the entry text ordered alphabetical em with a carriage return between every result
var valueToReturn = String.Join(Environment.NewLine, ordered);
textBox1.Text = valueToReturn;
这取决于你想做什么。在某些平台上,两者可能不完全相同。
Environment.NewLine
返回:
对于非Unix平台,返回一个包含"\r\n"的字符串,对于Unix平台,返回一个包含"\n"的字符串。
另外:
\n
字符(Unix上的换行符),请使用\n
\r\n
字符(Windows上的换行符),请使用\r\n
Environment.NewLine
如果在你提到的两种情况下都返回-1,则你的字符串中没有换行符。
Environment.NewLine与\n不同。它是一个CRLF(\r\n)。然而,我尝试使用IndexOf和\n,我的测试确实找到了这个值。你确定你搜索的是\n而不是\r吗?以十六进制格式查看您的文本,查看十六进制值。
Environment.NewLine
的值为\r\n
而不是\n
。 - Yuck.IndexOf("\\n")
。是的,那正是发生的事情。 - StriplingWarrior