VB.NET中的按换行符拆分字符串(转换为C#)

8
我试图将这段代码从C#转换为VB.NET。
string[] lines = theText.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);

以下是我所拥有的信息:问题在于它会在消息框中打印出整个文本框内容,而不是每行内容。

    Dim Excluded() As String

    Dim arg() As String = {"\r\n", "\n"}

    Excluded = txtExclude.Text.Split(arg, StringSplitOptions.None)

    For i As Integer = 0 To Excluded.GetUpperBound(0)
        MessageBox.Show("'" & Excluded(i) & "'")
    Next

1
你试过在线转换器吗?它给了我Dim lines As String() = theText.Split(New String() {vbCr & vbLf, vbLf}, StringSplitOptions.None) - Oskar Kjellin
3个回答

9

在VB中,您不能使用反斜杠(\)来转义字符。请使用ControlChars类:

Dim arg() As String = { ControlChars.CrLf, ControlChars.Lf }

1
使用ControlChars而不是旧的VB6风格常量名称,这样做会得到+1分。 :) - Sven
是的,VB.NET 没有转义字符,因此您必须使用这些特殊字符。 - Zafar Iqbal

8

就字符串字面值而言,在VB .Net中不存在转义序列。

您可以使用两个特殊常量来代替:

vbCrLf
vbLf

Dim Excluded() As String

Dim arg() As String = {vbCrLf, vbLf}

Excluded = txtExclude.Text.Split(arg, StringSplitOptions.None)

For i As Integer = 0 To Excluded.GetUpperBound(0)
    MessageBox.Show("'" & Excluded(i) & "'")
Next

应该可以解决问题(尚未经过测试)。

小错误:vbCrLf 等同于 C# 的 "\r\n",但 vbNewLine 是平台相关的。在 Windows 平台上(如果通过 mono 在 Linux 上运行,则会有所不同),vbNewLine 也等同于 "\r\n"。因此,此代码与 C# 版本并不严格等价:"\n" 永远不会被捕获!请使用 vbLf 或 ControlChars.Lf。 - odalet
@noah1989:你说得对,在mono的情况下,vbNewLine似乎等同于\r\n。我想mono团队选择了支持语言兼容性而不是操作系统约定。无论如何,根据MSDN,vbNewline只代表一个“新行”,并没有明确定义的字符串。虽然不太可能,但它的实际值可能会因平台或实现而改变。vbCrLf则永远不应该改变。 - odalet
@noah1989:关于平台相关的常量,可以通过使用#if预处理器指令轻松实现...在mono vb运行时源代码中滚动一下,你会注意到在moonlight情况下某些常量未被定义。同样的结构可以用于根据目标平台设置不同的常量值。 - odalet
@noah1989:抱歉刷屏了,但有趣的是,vbNewLine 似乎从 VBScript 时代开始就与平台相关:http://msdn.microsoft.com/en-us/library/hh277t8e.aspx - odalet
@odalet:当然可以使用预处理指令。但是,同一编译的 .net 程序集可以在不同的平台上执行——vbNewLine 作为一个常量,在编译后不能更改,因此它不能依赖于运行时平台。将其依赖于编译时平台会相当愚蠢。此外,由于它实际上是在框架 dll 中定义的,使用 #if 将使其依赖于在编译时使用的运行时平台本身编译的平台... - Stefan Paul Noack
显示剩余5条评论

2

在线转换器获取:

你的c#代码:

string[] lines = theText.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.None);

转换为VB.NET:

Dim lines As String() = theText.Split(New String() {vbCr & vbLf, vbLf}, StringSplitOptions.None)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接