Foxtable(狐表)用户栏目专家坐堂 → 在集合中如何确定包含某个字符的字段位置?


  共有2373人关注过本帖树形打印复制链接

主题:在集合中如何确定包含某个字符的字段位置?

帅哥哟,离线,有人找我吗?
ZJZK2018
  31楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:767 积分:6119 威望:0 精华:0 注册:2018/2/1 17:26:00
  发帖心情 Post By:2023/10/28 20:25:00 [只看该作者]

老师好
如果是这样有三个重复,如何处理?
Dim str As String = "台州市域铁路S2线土建施工Ⅱ标段土建施工Ⅱ标段土建施工Ⅱ标段A"

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  32楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107861 积分:548662 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/10/29 19:33:00 [只看该作者]

前提是要做什么判断?如果说只要有重复就算,那代码不需要改,一样适用,不管有几个重复。

如果说一定要判断是重复3次的才算需要的结果,可以把所有字符都添加到字典里,遍历完有重复的+1,然后看重复值等于3的

 回到顶部
帅哥哟,离线,有人找我吗?
ZJZK2018
  33楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:767 积分:6119 威望:0 精华:0 注册:2018/2/1 17:26:00
  发帖心情 Post By:2023/11/1 23:26:00 [只看该作者]

一般来说最多三个重复,如何删除二个留一个就OK

Dim str As String = "台州市域铁路S2线土建施工Ⅱ标段土建施工Ⅱ标段土建施工Ⅱ标段A"    '目标是删除"土建施工Ⅱ标段",不能用Replace
Dim lst As New List(Of String)
For m As Integer = 0 To str.Length - 1            '按顺序删除递增字符
    Dim ms As String = str.SubString(m)
    For ii As Integer = 1 To Math.Floor(ms.Length /2)       '步长值最大值为整个字符串的50%
        For i As Integer = 0 To ms.Length - 1 Step ii
            If i + ii < ms.Length - 1 Then
                lst.Add(ms.Substring(i, ii))
            Else
                lst.Add(ms.Substring(i))
            End If
        Next
    Next
Next
Dim dic As New Dictionary(Of Integer,String)
For n As Integer = 1 To lst.Count -1
    If lst(n) = lst(n - 1) Then          '遍历从集合中查找如果找到连续相同字符串
        If dic.ContainsKey(lst(n).Length) = False And dic.ContainsValue(lst(n)) = False  Then   '不重复的字符串
            dic.Add(lst(n).Length,lst(n))
        End If
    End If
Next
'''另一种最大值
If dic.Count > 0 Then                     '判断字典是否包含数据,因为dic.Count = 0 代码会出错
    Dim key As Integer = dic.Keys.Max
    Dim t As String = dic(key)
    Output.Show(t)               '显示"标段土建施工Ⅱ"
    Output.Show(str.Remove(str.IndexOf(t),t.Length))  '显示"台州市域铁路S2线土建施工Ⅱ标段土建施工Ⅱ标段A"
End If

如何再一次删除 "标段土建施工Ⅱ"  这个字符串??
[此贴子已经被作者于2023/11/1 23:31:24编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  34楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107861 积分:548662 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/11/2 9:10:00 [只看该作者]

再重复一次这个删除代码不就行了

 回到顶部
帅哥哟,离线,有人找我吗?
ZJZK2018
  35楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:767 积分:6119 威望:0 精华:0 注册:2018/2/1 17:26:00
  发帖心情 Post By:2023/11/2 13:18:00 [只看该作者]

老师如何用Do...Loop删除“中华”只留一个“中华”
Dim str As String = "中华AB中华人民共和国,中华民族"
Dim s As String = "中华"
If str.IndexOf(s) > -1
    str = str.Remove(str.IndexOf(s),s.Length) 
End If
msgbox(str)
[此贴子已经被作者于2023/11/2 13:19:31编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  36楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107861 积分:548662 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/11/2 13:37:00 [只看该作者]

Dim str As String = "中华AB中华人民共和国,中华民族"
Dim s As String = "中华"
Dim i As Integer = str.IndexOf(s)
If i > -1 Then
    i = str.IndexOf(s, i + s.Length)
    Do While i > -1
        str = str.Remove(i, s.Length)
        i = str.IndexOf(s, i)
    Loop
End If
msgbox(str)


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  37楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107861 积分:548662 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/11/2 13:41:00 [只看该作者]

不用循环也可以的

Dim str As String = "123中华AB中华人民共和国,中华民族"
Dim s As String = "中华"
Dim i As Integer = str.IndexOf(s)
If i > -1 Then
    Dim s2 As String = str.Substring(i + s.Length)
    str = str.Substring(0, i + s.Length) & s2.Replace(s, "")
End If
msgbox(str)

 回到顶部
总数 37 上一页 1 2 3 4