VB.NET:你能否通过一个字符串来分割另一个字符串?

35

例如,我可以这样做吗:

split = temp_string.Split("<beginning of record>")

你们建议的那些人:

split = Regex.Split(temp_string, "< beginning of record >")

它不起作用。它只返回第一个字符"<"。

而且那些建议的人:

Dim myDelims As String() = New String(){"< beginning of record >"}
split = temp_string.Split(myDelims, StringSplitOptions.None)

这个也不起作用。它只返回第一个字符。


我认为问题是你需要转义尖括号。请看我的编辑。 - Matthew Jones
1
如果您仍然遇到问题,您可能需要提供一个在temp_string中的示例。对于temp_string="before< beginning of record >after",您的样本运行良好。 - Matthew Whited
Regex.split 对我很有用。使用 String.split 的 char 数组选项似乎应该将每个 <、b、e、g、i、n、n、i、n、g 等单独分割,而不是作为一个整体。 - Jono
7个回答

42

试试这个:

string[] myDelims = new string[] { "<beginning of record>" };
split = temp_string.Split(myDelims,StringSplitOptions.None);

使用代码转换器运行此代码会产生以下结果:

Dim myDelims As String() = New String() { "<beginning of record>" }
split = temp_string.Split(myDelims, StringSplitOptions.None)

您可能还需要转义尖括号,像这样:

"\< beginning of record \>"

在我的情况下,直到我添加了StringSplitOptions.None选项它才起作用。如果没有它,VS会告诉我字符串无法转换为char。 - Rafiki
1
此外,一种行内编写的方法是:Split = temp_string.Split({"<记录开始>"}, StringSplitOptions.None)。 - Rafiki

18

@Matthew Jones 在VB.NET中的回答

Dim delim as String() = New String(0) { "<beginning of record>" } 
split = temp_string.Split(delim, StringSplitOptions.None)

7
你可以编写扩展方法,使其更加容易 (基于Matthew Jones的答案) < p >(我应该也展示一个例子...)

Dim results = "hay needle hay needle hay".Split("needle")
' results(0) = "hay "
' results(1) = " hay "
' results(2) = " hay"

... C# ...

public static class Tools
{
    public static string[] Split(this string input, params string[] delimiter)
    {
        return input.Split(delimiter, StringSplitOptions.None);
    }
}

... VB.Net ...

Module Tools
    <Extension()> _
    Public Function Split(ByVal input As String, _
                          ByVal ParamArray delimiter As String()) As String()
        Return input.Split(delimiter, StringSplitOptions.None)
    End Function
End Module

6
你可以查看Regex.Split()方法。这个似乎很好用。
  dim s as string = "you have a <funny> thing <funny> going on"
  dim a() as string = Regex.Split(s,"<funny>")
  for each b as string in a 
     Response.Write( b & "<br>")
  next

3

这似乎可行

    Dim myString As String = "aaajjbbbjjccc"
    Dim mySplit() As Char = "jj".ToCharArray
    Dim myResult() As String = myString.Split(mySplit, StringSplitOptions.RemoveEmptyEntries)

2

如果你需要将XML字符串拆分,那么不要使用VB字符串来完成这项工作。可以使用XSLT。VB/C#有用于使用XSLT呈现XML的方法。这样做会更快且更可靠。


1

我认为不行,它仅接受字符。你可以通过一些丑陋的hack方法先将字符串中所有实例替换为某个在字符串中不存在的字符,然后再按该字符拆分。

编辑后补充:我认为Regex.Split能够在正则表达式上进行拆分,因此如果您创建一个简单的正则表达式,其中包含要拆分的字符串,那应该可以起作用。


split = Regex.Split(temp_string, "<record开始>")? - Alex Gordon
模式 = "<记录开始>"Dim r As Regexr = new Regex(pattern)Dim results As String()results = r.Split(temp_string) - Brian Schroth
如果您要使用 Regex.Split,请在匹配的内容上使用 Regex.Escape - bdukes

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