如何在字符串中搜索换行符?下面两个似乎都回来了-1 ....!
theJ = line.IndexOf(Environment.NewLine);
OR
theJ = line.IndexOf('\n');
它正在搜索的字符串是“你好” 我正在解析的字符串包含这个“printf(”yo \ n“);” 我在比较中看到的字符串是:“\ tprintf(\”yo \ n \“);”
答案 0 :(得分:7)
"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
");
它实际上有一个转义换行符,换句话说,一个反斜杠字符后跟一个'n'。这就是你调试时看到的字符串是"\tprintf(\"yo\\n\");"
的原因。如果要查找此字符组合,可以使用:
line.IndexOf("\\n")
例如:
"\tprintf(\"yo\\n\");" // output as " printf("yo\n");"
"\tprintf(\"yo\\n\");".IndexOf("\\n") // returns 11
答案 1 :(得分:3)
您的专线看起来不包含换行符。
如果您在换行符上使用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
}
答案 2 :(得分:2)
这应该有效,但在 Windows 中,您必须搜索“ \ r \ n ”。
-1只表示没有找到输入。
答案 3 :(得分:1)
这取决于你想要做什么。在某些平台上,两者可能不相同。
Environment.NewLine
返回:
对于非Unix平台或字符串包含“\ r \ n”的字符串 包含Unix平台的“\ n”。
此外:
\n
字符(Unix上的新行),请使用\n
\r\n
字符(Windows上的新行),请使用\r\n
Environment.NewLine
如果在你提到的两种情况下它都返回-1,那么你的字符串中没有新行。
答案 4 :(得分:1)
当我在大学时,我做了一个WebForms应用程序来订购参考。
换行/回车就是我以前用来打破参考的。
//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;
答案 5 :(得分:0)
Environment.NewLine与\ n不同。这是一个CRLF(\ r \ n)。但是,我确实尝试了使用IndexOf的\ n,我的测试确实找到了值。你确定你要搜索的是\ n而不是\ r?以十六进制格式查看文本,查看十六进制值是什么。