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


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

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

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


加好友 发短信
等级:三尾狐 帖子:767 积分:6119 威望:0 精华:0 注册:2018/2/1 17:26:00
  发帖心情 Post By:2023/10/21 12:51:00 [显示全部帖子]

Dim s As String = "温州瑞安段土建工程标段标段"
Dim lst As New List(Of String)
For ii As Integer = s.Length - 1 To 2 Step - 1
    For i As Integer = s.Length - 1 To 0 Step - ii
        If i + ii < s.Length - 1 Then
            lst.Add(s.Substring(i, ii))
        Else
            lst.Add(s.Substring(i))
        End If
    Next
Next
Dim ret As String = String.Join("@", lst.ToArray)
Output.Show(ret)

上面代码的结果是:      每次都有一个@

@温州瑞安段土建工程标段标段@

@州瑞安段土建工程标段标段@

@瑞安段土建工程标段标段@

@安段土建工程标段标段@

....

@工程标段标段@瑞安段土建@

@程标段标段@段土建工@温州瑞安@

@标段标段@建工程@安段土@温州瑞@

@段标段@程标@建工@


我需求的结果:

@州瑞@安段@土建@工程@标段@标段

@州瑞安@段土建@工程标@段标段

@州瑞安段@土建工程@标段标段

温州瑞@安段土建工@程标段标段

@州瑞安段土建@工程标段标段



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


加好友 发短信
等级:三尾狐 帖子:767 积分:6119 威望:0 精华:0 注册:2018/2/1 17:26:00
  发帖心情 Post By:2023/10/22 11:47:00 [显示全部帖子]

老师下面代码能解决很大一部分问题,但现在又出现一个小问题?
Dim s As String = "温州工程施工S-5-5标段施工S-5-5标段"
Dim lst As New List(Of String)
For m As Integer = 0 To s.Length - 1            '按顺序删除递增字符
    Dim ms As String = s.SubString(m)
    For ii As Integer = 2 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
For n As Integer = 1 To lst.Count -1
    If lst(n) = lst(n-1) Then                                   '如果找到连续相同字符串
        Output.Show("重复 = " & lst(n))
        'msgbox(s.Remove(s.IndexOf(lst(n)),lst(n).Length))       '删除连续相同字符串中一个
        'Exit For
    End If
Next
显示结果如下:
重复 = -5
重复 = -5
重复 = -5
重复 = -5
重复 = -5
重复 = 施工S-5-5标段      需求:1、如何把这个字符串长度最长的提取出来  2、"温州工程施工S-5-5标段施工S-5-5标段施工S-5-5标段"这种有三个连续的如何删除二个只保留一个?
重复 = -5
重复 = -5
重复 = -5
重复 = -5
重复 = -5
重复 = -5
重复 = -5
重复 = -5


[此贴子已经被作者于2023/10/22 12:05:25编辑过]

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


加好友 发短信
等级:三尾狐 帖子:767 积分:6119 威望:0 精华:0 注册:2018/2/1 17:26:00
  发帖心情 Post By:2023/10/22 22:06:00 [显示全部帖子]

下面代码出错:
Dim s As String = "温州工程施工S-5-5标段施工S-5-5标段"
Dim lst As New List(Of String)
For m As Integer = 0 To s.Length - 1            '按顺序删除递增字符
    Dim ms As String = s.SubString(m)
    For ii As Integer = 2 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 lst1 As New List(Of String)
For n As Integer = 1 To lst.Count -1
    If lst(n) = lst(n-1) Then
        lst1.Add(lst(n))                '如果找到连续相同字符串
        For nn As Integer = 0 To lst1.Count -1
            If lst1(nn).Length > lst1(nn-1).Length
                Output.Show(lst1(nn))
            End If
        Next
        'msgbox(s.Remove(s.IndexOf(lst(n)),lst(n).Length))       '删除连续相同字符串中一个
        'Exit For
    End If
Next



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


加好友 发短信
等级:三尾狐 帖子:767 积分:6119 威望:0 精华:0 注册:2018/2/1 17:26:00
  发帖心情 Post By:2023/10/22 22:49:00 [显示全部帖子]

已调整好了:

Dim s As String = "温州工程施工S-5-5标段施工S-5-5标段"
Dim lst As New List(Of String)
For m As Integer = 0 To s.Length - 1            '按顺序删除递增字符
    Dim ms As String = s.SubString(m)
    For ii As Integer = 2 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 lst1 As New List(Of String)
For n As Integer = 1 To lst.Count -1
    If lst(n) = lst(n - 1) Then          '如果找到连续相同字符串
        lst1.Add(lst(n))
    End If
Next
For nn As Integer = 1 To lst1.Count -1
    If lst1(nn).Length > lst1(nn-1).Length
        Output.Show(lst1(nn))
        'msgbox(s.Remove(s.IndexOf(lst(n)),lst(n).Length))       '删除连续相同字符串中一个
        'Exit For
    End If
Next

老师为什么0要改为1,不理解?For nn As Integer = 1 To lst1.Count - 1

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


加好友 发短信
等级:三尾狐 帖子:767 积分:6119 威望:0 精华:0 注册:2018/2/1 17:26:00
  发帖心情 Post By:2023/10/22 23:09:00 [显示全部帖子]

图片点击可在新窗口打开查看

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


加好友 发短信
等级:三尾狐 帖子:767 积分:6119 威望:0 精华:0 注册:2018/2/1 17:26:00
  发帖心情 Post By:2023/10/27 13:37:00 [显示全部帖子]

下面代码如果取消A可以出结果,但加A就不行,请老师帮我改良一下,谢谢
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)
    msgbox(str.Remove(str.IndexOf(t),t.Length))
End If

[此贴子已经被作者于2023/10/27 13:38:10编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
ZJZK2018
  17楼 | 信息 | 搜索 | 邮箱 | 主页 | 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"

 回到顶部
帅哥哟,离线,有人找我吗?
ZJZK2018
  18楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
ZJZK2018
  19楼 | 信息 | 搜索 | 邮箱 | 主页 | 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编辑过]

 回到顶部
总数 20 上一页 1 2