VB.NET按回车换行符分割字符串失败的问题求助
VB.NET按回车换行符分割字符串失败的问题求助
嗨,我来帮你捋捋这个问题!你所有的分割尝试都失败,核心原因其实是你定义字符串的时候用错了换行符的写法——VB.NET里不像C#那样用\r、\n作为转义字符表示回车换行,你写的"abc\rsome data \nmore data\n the end\r"里的\r和\n都是字面量的字符(也就是反斜杠加字母r/n),而不是真正的回车(Chr(13))和换行(Chr(10))控制字符!
咱们逐个看你写的代码问题:
- 第一个
Split(New Char() {Chr(13), Chr(10)}):你要分割的是真正的回车/换行,但字符串里根本没有这些字符,只有\+r、\+n,自然分割不出来 - 第二个用
Environment.NewLine:同样,字符串里没有Windows系统真正的换行符(\r\n组合),只有字面量的\r和\n,所以匹配不到 - 第三个
Replace(Chr(13), "").Split(Chr(10)):你替换的是真正的回车字符,但字符串里的是\r字面量,替换等于没做,Split自然也无效 - 第四个
Split(New Char() {vbCrLf, vbCr, vbLf}, ...):这里还有个小错误——vbCrLf是字符串类型(\r\n组合),不能放到Char数组里,Char数组只能放单个字符,这个代码其实编译都会报错 - 第五个
Split(New Char() {"\r", "\n", "\r\n"}, ...):同样,"\r"是字符串,不是Char类型,写法本身就不对,编译不通过
正确的解决步骤:
先确保字符串里有真正的回车/换行控制字符:
定义字符串时,要用VB.NET的内置常量或者Chr函数来表示控制字符:' 方式一:用VB内置的换行常量 Dim info As String = "abc" & vbCr & "some data " & vbLf & "more data" & vbLf & " the end" & vbCr ' 方式二:用Chr函数 Dim info As String = "abc" & Chr(13) & "some data " & Chr(10) & "more data" & Chr(10) & " the end" & Chr(13)如果你的字符串是从外部获取的(比如文件、网络请求),那它本身应该已经包含真正的控制字符,不需要手动写字面量
\r。用正确的方式分割:
推荐用兼容所有换行格式(Windows的\r\n、Linux的\n、Mac旧版的\r)的分割方式,同时去掉空元素:Dim lines As String() = info.Split({vbCr, vbLf}, StringSplitOptions.RemoveEmptyEntries)如果你只需要针对Windows系统的换行,也可以直接用
Environment.NewLine:Dim lines As String() = info.Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries)
这样处理后,分割出来的lines数组就会正确包含每一段内容啦!
备注:内容来源于stack exchange,提问作者Impostor Syndrome
相关产品推荐
相关产品推荐

