【问题标题】:Is there any build-in function in VBScript to repeat a string N-times?VBScript 中是否有任何内置函数可以将字符串重复 N 次?
【发布时间】:2016-10-19 12:30:35
【问题描述】:

VBScript 中有一个函数String(number,character) 返回一个包含指定长度的重复字符的字符串。例如:

String(5, "A")     ' output: "AAAAA"

有没有重复字符串的函数?例如:

RepeatString(5, "Ab")     ' output "AbAbAbAbAb"

【问题讨论】:

  • 您在什么情况下使用 VBScript?没有内置任何内容,但您可以声明自己的函数来执行此操作。
  • @WiktorStribiżew,我认为您应该提取引用 VBScript 的代码部分并将其作为答案发布(带有参考链接)
  • @VictorMoraes:我会,但亚历克斯更快。我觉得他的回答就够了。我一直在寻找一个骗子,并且一开始并没有专注于回答。
  • @WiktorStribiżew 您的链接提供了两种方法,而亚历克斯只有一种方法,但是是的,也许就足够了

标签: string vbscript repeat


【解决方案1】:

不,没有内置任何东西。而是:

n      = 5
str    = "Ab"
result = replace(space(n), " ", str)

【讨论】:

  • 巧妙! Replace(Space(3)," ","ha")
【解决方案2】:

对于一般的简单解决方案

Function RepeatString( number, text )
    Redim buffer(number)
    RepeatString = Join( buffer, text )
End Function

但是如果文本很短但重复次数很高,这是一个更快的解决方案

Function RepeatString( ByVal number, ByVal text )
    RepeatString=""
    While (number > 0)
        If number And 1 Then 
            RepeatString = RepeatString & text
        End If 
        number = number \ 2 
        If number > 0 Then
            text = text & text 
        End If 
    Wend
End Function

【讨论】:

    【解决方案3】:

    为了代码简洁,接受的答案很好。但是下面的函数实际上快了 10 倍。它的速度是RepeatString() 的两倍。它使用了Mid 的一个鲜为人知的功能,它一次性用 repeating 模式填充字符串缓冲区的其余部分...

    Function Repeat$(ByVal n&, s$)
        Dim r&
        r = Len(s)
        If n < 1 Then Exit Function
        If r = 0 Then Exit Function
        If r = 1 Then Repeat = String$(n, s): Exit Function
        Repeat = Space$(n * r)
        Mid$(Repeat, 1) = s: If n > 1 Then Mid$(Repeat, r + 1) = Repeat
    End Function
    

    【讨论】:

    • 好久没做VBA了,所以没跟上语法,所以这个比较神秘
    • 这里没有新语法。事实上,这个功能可以在 1980 年代的 BASIC 中使用。
    • 我之前没见过String$(n, s)。它有什么作用?我认为它的行为类似于 Space$(n * r),但我无法在 Microsoft VBA 文档中找到它。
    猜你喜欢
    • 2011-05-06
    • 2012-12-17
    • 2011-04-11
    • 2014-07-13
    • 1970-01-01
    • 2020-01-12
    • 2021-07-25
    • 1970-01-01
    相关资源
    最近更新 更多