搜索换行符C#.net
本文关键字:net 换行符 搜索 | 更新日期: 2023-09-27 18:22:42
如何在字符串中搜索换行符?以下两项似乎都在回归-1。。。。!
theJ = line.IndexOf(Environment.NewLine);
或
theJ = line.IndexOf(''n');
它正在搜索的字符串是"yo''n"我正在分析的字符串包含这个"printf("yo''n");"我在比较过程中看到的字符串是:"''tprintf(''"yo''n''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
");
它实际上有一个转义的换行符,或者换句话说,一个后面跟着"n"的反斜杠字符。这就是为什么调试时看到的字符串是"'tprintf('"yo''n'");"
。如果你想找到这个字符组合,你可以使用:
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
}
尽管在Windows中,您必须搜索'''r''n',但这应该有效。
-1只是表示找不到入口。
这取决于你想要做什么。在某些平台上,两者可能不完全相同。
Environment.NewLine
返回:
对于非Unix平台,包含"''r''n"的字符串,或字符串包含Unix平台的"''n"。
还有:
- 如果要搜索
'n
字符(Unix上的新行),请使用'n
- 如果要搜索
'r'n
字符(Windows上的新行),请使用'r'n
- 如果您的搜索依赖于当前平台,请使用
Environment.NewLine
如果在您提到的两种情况下都返回-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;
Environment.NewLine与''n不同。它是一个CRLF(''r''n)。不过,我确实尝试过使用IndexOf,并且我的测试确实找到了值。您确定要搜索的是a而不是a吗?以十六进制格式查看文本并查看十六进制值。