我正在尝试通过char 10和13拆分字符串。在下面的所有这些例子中,包含\r
和\n
的整个字符串以第一个元素行结束(0)我做错了什么?
代码在Windows 10上运行。VB.NET:
Dim info As String = "abc\rsome data \nmore data\n the end\r"
Dim lines As String() = info.Split(New Char() {Chr(13), Chr(10)})
lines = info.Split(New String() {Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
lines = info.Replace(Chr(13), "").Split(Chr(10))
lines = info.Split(New Char() {vbCrLf, vbCr, vbLf}, StringSplitOptions.RemoveEmptyEntries)
lines = info.Split(New Char() {"\r", "\n", "\r\n"}, StringSplitOptions.RemoveEmptyEntries)
任何帮助非常感谢!
2条答案
按热度按时间uurity8g1#
VB.Net不像C#那样支持转义字符,所以你的
"\n"
实际上就是"\"
和"n"
两个字符。要首先构建该字符串,您应该使用
Chr
函数。这里是使用字符串插值现在你的代码应该可以工作了
您的原始字符串不等于
因为:
Chr(13) <> Environment.NewLine
Chr(10) <> Environment.NewLine
在Windows中,
Environment.NewLine = Chr(13) & Chr(10)
fnvucqvd2#
换行符可以是回车、换行或回车和换行。这对显然是Windows的默认值,但回车符本身是Unix的默认值,并由Windows写字板应用程序使用,大概是为了RTF与Unix的互操作性。在VB.NET中,您应该使用
ControlChars
类来处理这类事情。Cr
字段是包含回车的Char
,Lf
字段是包含换行符的Char
,CrLf
和NewLine
字段都是包含回车和换行符的Strings
。如果你想在回车和换行符对上拆分,那么你需要使用String.Split
的重载之一,它在子字符串上拆分,而不是单个Chars
,例如:输出:
如果您也想允许单字符换行符,那么您可以指定多个分隔符。只要确保将多字符选项放在第一位,这样它们就优先,例如: