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

我有一字串
"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个回答

 你怎么定义像?比较长就是像?
那么
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 可以教我实际怎么写吗?
接近 2 年之前 回复
caozhy
每个人都有一个梦才不会孤单的说话就有天堂 回复weixin_40187983: 也可以是List(Of String),这样你数据库查询出来可以依次Add到集合里。
接近 2 年之前 回复
caozhy
每个人都有一个梦才不会孤单的说话就有天堂 回复weixin_40187983: tofind数组,这个你可以换成你实际要代入的
接近 2 年之前 回复
weixin_40187983
weixin_40187983 目前先用比较长来判断,应该准确度有了!想请问我想把这些字串的ID带入,要如何带入呢?
接近 2 年之前 回复

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

这个是我写的比较简易的,但是有一个问题
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
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问