搜索换行符C#.net

时间:2012-02-03 19:43:41

标签: c# .net

如何在字符串中搜索换行符?下面两个似乎都回来了-1 ....!

 theJ = line.IndexOf(Environment.NewLine);

OR

 theJ = line.IndexOf('\n');

它正在搜索的字符串是“你好” 我正在解析的字符串包含这个“printf(”yo \ n“);” 我在比较中看到的字符串是:“\ tprintf(\”yo \ n \“);”

6 个答案:

答案 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.ReadAllLinesstring.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?以十六进制格式查看文本,查看十六进制值是什么。