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


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

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

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


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

Dim s As String = "温州瑞安段土建工程标段标段"

For ii As Integer = 2 To Math.Floor(s.Length / 2)
    Dim lst As New List(Of String)
    For i As Integer = s.Length - ii To 0 Step - ii
        lst.Insert(0, s.Substring(i, ii))
        If i < ii Then
            lst.Insert(0, s.Substring(0, i))
        End If 
    Next
    Dim ret As String = String.Join("@", lst.ToArray)
    Output.Show(ret)
Next


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

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


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

1、判断所有字符串长度,看那个长度最长
2、
dim s as string = "温州工程施工S-5-5标段施工S-5-5标段施工S-5-5标段"
s = s.reolace("施工S-5-5标段施工S-5-5标段施工S-5-5标段","施工S-5-5标段")
msgbox(s)

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



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


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

For nn As Integer = 1 To lst1.Count - 1

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

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


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

想想为什么【For n As Integer = 1 To lst.Count -1】这里也是1?同样的道理

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


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

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

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

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


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

Dim str As String = "台州市域铁路S2线土建施工Ⅱ标段土建施工Ⅱ标段A"
Dim dic As New Dictionary(Of String, Integer)
Dim h As Integer = Math.Floor(str.Length / 2)

Dim maxString As String
Dim b As Boolean
For ii As Integer = h To 1 Step - 1
    For m As Integer = 0 To str.Length - 1
        Dim ms As String = str.SubString(m)
        Dim lst As New List(Of String)
        For i As Integer = 0 To ms.Length - 1 Step ii
            Dim s As String = ""
            If i + ii <= ms.Length - 1 Then
                s = ms.Substring(i, ii)
            Else
                s = ms.Substring(i)
            End If
'            Output.Show("s=" & s)
            If lst.Contains(s) Then
                maxString = s
                b = True
                Exit For
            Else
                lst.add(s) 
            End If
            
        Next
        If b Then
            Exit For
        End If 
    Next
    If b Then
        Exit For
    End If 
Next

Output.Show(maxString)

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