weixin_40187983
weixin_40187983
采纳率73.6%
2018-06-28 07:16 阅读 528
已采纳

相似字串比对-使用vb.net

5

我有一字串
"BBB-AAA,AAACCCkkkkkDDDDD"

我会从数据库载入一系列的短的字串去匹配,不能限制以下数组出现的先后顺序
1:AAA
2:AAACC
3:A
我希望这个"BBB-AAA,AAACCCkkkkkDDDDD"字串,最后是被2:AAACC所配到

用字串 like * AAA* 或是like AAACC 或是like A都是true的
但是最像的是AAACC,,如何在vb.net语法内设计呢?或是思路怎么做呢?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • 已采纳
    caozhy 从今以后生命中的每一秒都属于我爱的人 2018-06-28 07:55
     你怎么定义像?比较长就是像?
    那么
    Dim str1 = "BBB-AAA,AAACCCkkkkkDDDDD"
    Dim tofind() as String = { "AAA", "AAACC", "A" }
    Dim query = tofind.OrderBy(Function(x) x.Length).Where(Function(x) str1.Contains(x)).LastOrDefault()
    If Not(query Is Nothing) Then
    MsgBox query
    
    点赞 评论 复制链接分享
  • weixin_40187983 weixin_40187983 2018-06-28 08:26

    To Caozhy
    其实数据库里是长这样子的,如2:AAACC或是AAACX都算是同一个型号,因此ID是一样的
    图片说明
    我会一次从数据库带入一组数据
    第一次AAA
    第二次AAACC,AAACX其中一个同都可以
    第三次A,A0
    { "AAA", "AAACC", "A" }要变成{"AAA","AAACC","AAACX","A","A0"}{1,2,2,3,3}
    这样的感觉吗?
    最后传出值ID=2

    点赞 评论 复制链接分享
  • weixin_40187983 weixin_40187983 2018-06-28 09:24

    这个是我写的比较简易的,但是有一个问题
    TBODescription的字串,应该是id=2,但是被会顺序先的id=1时,就判断true,就跳离回圈了
    这时候也不能用那个字串比较长用排序长短来判断,因为TBOProductName,他是数组,有好几个在一起(例如AAA,AAAC,AAA-01都算同一个)

    Public Function TestFindTBOFactoryID(ByVal TBODescription As String) As Long
    TBODescription = "品牌:refa,型号:CARAT RAY FACE,生产企业:MTG Co., LTD,颜色分类:银,是否电动:否,瘦脸机样式:滚轮式"
    Dim TBODescription2 = "品牌:refa,型号:RF-PC2019B 2,生产企业:MTG,颜色分类:银色,是否电动:否,瘦脸机样式:滚轮式"

        Dim SqlStr As String
        SqlStr = "Select AtTBOProductID, TBOProductName From tbtbofactory "
        Dim mytb As New System.Data.DataTable
        mytb = mydb.dbDataTable(SqlStr)
        '这个表格长成
        ' AtTBOProductID, TBOProductName
        ' 1  CARAT RAY,RF-PC2019B         TBODescription2这个会被选到      
        ' 2  CARAT RAY FACE               TBODescription这个会被选到
        ' 3  ReFa S CARAT RAY,S CARAT RAY
        ' 4  CARAT,PEC-L1706
        ' 5  ReFa S CARAT,S CARAT
        ' 6  4 CARAT,RF-FC1932B
        ' 7  CARAT FACE,RF-CF1842B
    
        Dim rowIndex As Long = 0
        Dim AtTBOProductID As Long = 1
        While rowIndex < mytb.Rows.Count
            Dim str As String = mytb.Rows(rowIndex).Item(1)
            '切成多段
            str = str.TrimEnd(",")
            Dim arr() As String = Split(str, ",")
            Dim i As Long = 0
            For i = 0 To arr.Count - 1
                If TBODescription.ToUpper Like "*" & arr(i).ToUpper & "*" Then
                    AtTBOProductID = mytb.Rows(rowIndex).Item(0)
                    Exit While
                End If
            Next i
            rowIndex += 1
        End While
        Return AtTBOProductID
    End Function
    
    点赞 评论 复制链接分享

相关推荐