【问题标题】:Count how many specific characters in string计算字符串中有多少个特定字符
【发布时间】:2019-08-29 10:44:35
【问题描述】:

我有一个搜索框。

我的管理员用户可能会搜索“@MG @EB dorchester”。

在 ASP 中,我需要计算符号“@”在字符串中出现的次数。怎么可能?

【问题讨论】:

    标签: vbscript asp-classic


    【解决方案1】:

    试试这个:

    len(yourString) - len(replace(yourString, "@", ""))
    

    【讨论】:

    • 我想计算长度超过一个字符的字符串出现的次数,所以我使用了您的答案并添加了“/len(substring)”。作品。谢谢:)
    • @MrVimes 你能说得更具体点吗?
    • @StephenR 我不记得了,我评论是一年多以前。如果我记得我会删除这条评论并添加细节作为新评论。
    • 刚刚添加到最后:len(yourString) - len(replace(yourString, "@", "")) / len(substring)
    • 但是,@srawn 在这个页面上的答案在我的测试中是两倍快,并且无需修改即可处理多字符指针
    【解决方案2】:
    Response.write ubound(split(str,"@"))
    

    足以计算特定字符的出现次数

    【讨论】:

    • 这比 Andrew Hare 使用 len 和 replace 的答案要快得多。它还允许在不进一步修改的情况下使用多字符串。非常好!
    【解决方案3】:

    对于 JW01

    Dim pos : pos = 0
    Dim count : count = -1
    Do 
      count = count + 1
      pos = InStr(pos + 1, str, "@")
    Loop While (pos > 0)
    

    【讨论】:

    • 嗨,安东尼。感谢您的输入。您能否澄清 Andrew 的建议存在什么问题,该建议显然分配了至少 2 个额外的字符串?您提供的代码会更快处理吗?
    • @Martin:Andrew 的建议在任何实际或实际的方面都没有问题。我发布了这个答案,因为我认为 JW01 的最初尝试有一些优点,但实施存在缺陷。这种方法的唯一优点是要搜索的字符串很大。在某些时候,安德鲁正在使用的Replace 函数中所需的新大字符串的创建和复制将比此答案中的Do..Loop 花费更多。但是我怀疑“大”比典型的要多得多,所以对于典型的脚本,安德鲁的更好。
    【解决方案4】:

    尝试一个while循环:

    Do While (str.indexOf("@") != -1)
      count = count + 1
      str = right(str, len(str) - str.indexOf("@"))
    Loop
    

    编辑

    这个 for 循环可能更有意义:

    dim strLen, curChar, count
    count = 0
    int strLen = len(str)
    for i = 1 to strLen
      curChar = mid(str, i, 1)
      if curChar = "@"
        count = count + 1
      end if
    next
    

    【讨论】:

    • 也感谢您的意见,但我想我更喜欢 Andrew 的尝试
    • 嗯...如果 str 包含“@”,While 什么时候完成?
    • @Anthony,很好的收获!是的,必须修改字符串才能没有无限循环。当我提出答案时有点晚了。
    • 好吧,这可以防止无限循环,但现在你正在改变 str 变量,这可能是一个不需要的副作用。
    • @Anthony,说得好。用 for 循环修复它。无论如何,Andrew 提供了一个更优雅的解决方案。
    【解决方案5】:

    将搜索替换为空白,找出原始字符串和新字符串之间的差异将是字符串出现的次数

    Dim a = "I @ am @ Thirs@ty" 
    Dim count 
    count = Len(a) - Len(Replace(a,"@",""))
    Response.write count
    

    【讨论】:

      【解决方案6】:
      Function FnMatchedStringCountFromText(strText,strStringToSearch)
       strLength =  Len(strText)
       strNumber = 1
       IntCount = 0
       For i = 1 to strLength
           If Instr(1,strText,strStringToSearch,0) > 0 Then
              stMatch = Instr(1,strText,strStringToSearch,0)
              strText = Mid(strText,stMatch+2,strLength)
              IntCount = IntCount+1
           Else
               Exit For
           End If
       Next
      FnMatchedStringCountFromText = IntCount
      End Function
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-03
        • 2013-11-01
        • 2014-01-30
        • 2016-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-22
        相关资源
        最近更新 更多