【问题标题】:Split string by substring not char按子字符串而不是字符拆分字符串
【发布时间】:2014-01-15 16:27:08
【问题描述】:

在询问之前我已经搜索了该网站,但我找到的解决方案都没有解决我的问题。

首先我有一个字符串,类似于:

Dim someString As String = "<object>sometext</object><object>sometext</object><object>sometext</object>"

我正在尝试将其拆分为一个字符串数组,如下所示:

stringArray 0 --> "<object>sometext</object>"
stringArray 1 --> "<object>sometext</object>"
stringArray 2 --> "<object>sometext</object>"

我尝试拆分文本的方法会从结果中删除分隔符,这不是我想要的,因为它会使代码无效。

【问题讨论】:

标签: .net regex vb.net string split


【解决方案1】:

这是一个伪代码,因为我不确定确切的 VB 语法,但你可以尝试在每个字符的末尾强制一个字符,例如:

Dim someString As String = "<object>sometext</object><object>sometext</object><object>sometext</object>"
var stringToSpilt = someString.Replace("</object>","</object>~")
var splitObjects = stringToSpilt.Split("~")

如果“对象”可以是任何文本,那么 RegEx 替换会这样做,但正如上面的人所评论的,如果是 XML 拆分,它会比这更复杂。

【讨论】:

  • 替换不起作用。您需要重新分配它:someString = someString.Replace("&lt;/object&gt;","&lt;/object&gt;~")
  • 啊,我喜欢这个主意,只需多写一行代码,谢谢 Mr.PieFace!
【解决方案2】:

使用 IndexOf 并使用 List(Of String),没有隐藏的字符串碎片

Dim someString As String = "<object>sometext</object><object>sometext</object><object>sometext</object>"
Dim result = new List(Of String)()
Dim pos = 0
Dim init = 0
Dim len = "</object>".Length
do 
   pos = someString.IndexOf("</object>", init)
   if pos <> -1 Then
      result.Add(someString.Substring(init, pos +  len - init))
      init = pos + len + 1
   End If
Loop while pos <> -1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-08
    • 2015-12-18
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多