一个比较本的办法:)    Dim s As String
    
    s = "aa,aaa,,,s,,,,as,,,,,,ass,,asd,d,asd,,asd,,,asd,"
    
    Do While InStr(s, ",,") <> 0
        Debug.Print s
        s = Replace(s, ",,", ",")
        
    Loop
    Debug.Print s
    把逗号环成空格

解决方案 »

  1.   

    Private Sub Form_Load()
        Debug.Print TrimString(" 啊   ac B  ")
    End SubPrivate Function TrimString(str As String) As String
        Dim strTemp As String
        
        strTemp = str
        Do While InStr(1, strTemp, Space(2)) > 0
            strTemp = Replace(strTemp, Space(2), Space(1))
        Loop
        TrimString = strTemp
    End Function够简单吧!
      

  2.   

    m_str=" 啊   ac B  "
    do while instr(1,m_str,"  ",1)>0
       m_str=replace(m_str,"  "," ",1,,1)
    loop
    msgbox m_str
      

  3.   

    Private Function ReplaceSpace(ByVal InputString As String, Optional ByVal ReplaceString As String = " ") As String
    '    Author:吴文智
    '      Date:2002-06-14
    'Description:替换字符串中的重复字符,默认替换空格    Dim lngCount As Long '记数器,用来判断是不是有多个要替换的字符
        Dim lngI As Long
        Dim strTemp As String '用来存放操作过程中的字符串
        
        lngCount = 0
        '从尾开始可以为Mid函数的使用带来方便,不必总是重新计算长度
        For lngI = Len(InputString) To 1 Step -1
            If Mid(InputString, lngI, 1) = ReplaceString Then
                lngCount = lngCount + 1 '记数直到下一个非替换字符为止
            Else
                If lngCount > 0 Then
                    '现在的字符串我们可以看成是:左边要保留的字符串(长度为lngI)+中间不要的字符串(长度为lngCount-1,因为要保留1个,不是全部删除)+右边要保留的字符串(起始位置在lngI+lngCount处,长度是直到末尾)
                    '我们要得到的结果是:左边的字串+1个替换字符+右边字串(下面的表达式里,替换字符被包含在第二个Mid函数的结果中)
                    '这里用了strTemp来存放结果,如果直接用InputString,那第二个Mid函数就会出错了,呵呵
                    strTemp = Mid(InputString, 1, lngI) & Mid(InputString, lngI + lngCount)
                    InputString = strTemp
                End If
                lngCount = 0
            End If
        Next
        
        ReplaceSpace = InputString
    End Function
      

  4.   

    俺来个最笨(笨的自已也说不清了)的方法 。  array1 = split(strSrc," ")
      fot tmp = 0 to Ubound(array1)
        if array1(tmp) <> " " then strKey = strKey & array1(tmp)
      next tmp
      strSrc = strKey
     自己没有亲自试,写得也不一定对,但用split肯定能行!
      

  5.   

    这个问题在C那么简单在VB变得这么麻烦。VB没有象C Char这一种类型,只有String吗?
    斑竹!
      

  6.   

    aaaaaa    bbbbb    cccc   ddd
    |----|    |---|    |--|   |-|
       1        2        3     4
    如上字符串,可以看成四段字符串,中间没有空格.
    算法思想为:取每个子字符串自己加,中间留一个空格.
    定义start为子字符串的开始位置,length为子字符串的长度
    定义resultstr为结果字符串,初值为""
    从原字符串第一个字符开始读,读到出现空格为止,可以得到第一个子字符串的start和length,则resultstr=resultstr&Mid(inputstr,start,length)&" "
    然后从下一个非空格开始,重复上述工作,注意的是最后一次不用加空格.
    算法中子字符串的开始和结尾的判断可以在循环中使用标志量,相信大家都可以做.
    这样写虽然代码会比较长,但效率应该比上述循环替换要高
      

  7.   

    做起来不难,要提高效率可是很有研究的空间。我的想法是这样:遍历一遍字符串,用一个boolean变量,当碰到空格,置为True,碰到非空格,置为False,当变量为False时将字符写入另一个字符串。我想这样应该是效率最高的,因为只需遍历一遍,如果还要提高效率,那只有从指针上动脑筋,用内存指针来替换mid函数。
    Private Function Replace_Space(ByVal SourceString As String) As String
        Dim i As Integer
        Dim isSpace As Boolean
        Dim strTmp As String
        
        isSpace = False
        For i = 1 To Len(SourceString)
            strTmp = Mid(SourceString, i, 1)
            If strTmp = " " Then
                If Not isSpace Then
                    Replace_Space = Replace_Space & strTmp
                    isSpace = True
                End If
            Else
                Replace_Space = Replace_Space & strTmp
                isSpace = False
            End If
        Next i
    End Function
      

  8.   

    我提的方法和楼上的很像,区别在于,他是每一个非空字符就加,而我要等找到一个子字符串后才加,因为觉得这样可能效率会高一些.不过,还是期待最C~~~o~o~l~~~~的答案. :}
      

  9.   


    Dim a$, m%
    a = " 啊   ac B  "
    Do
        m = Len(a)
        a = Replace(a, "  ", " ")
    Loop Until m = Len(a)
      

  10.   

    说白了就是不断把二个空格替换为一个空格!问题: 如何将某字符串中的多个空格压缩为一个空格(如:" 啊   ac B  " 变为 " 啊 ac B ")?
    解答: Public Function ReplaceNCharToChar(s As String, Optional Char As String = " ") As String
                 ReplaceNCharToChar = s
                 Do Until VBA.Len(VBA.Replace(ReplaceNCharToChar, VBA.String(2, Char), Char)) = VBA.Len(ReplaceNCharToChar)
                    ReplaceNCharToChar = VBA.Replace(ReplaceNCharToChar, VBA.String(2, Char), Char)
                 Loop
          End Function
          Private Sub Command4_Click()
                  VBA.MsgBox "[" & ReplaceNCharToChar("  s  我 是谁         aa  b b     cc    ") & "]"
          End Sub
      

  11.   

    哈哈,原来是这个方法,斑竹也没有啥创新吗!失望ing
    虽然递归使得代码很简洁,可这大概也是效率最递的方法了。
      

  12.   

    Private Sub Command1_Click()
        Dim a As String
        a = "aaaa bbbb   cccc   dddd   "
        Form1.Print a
        MyTrim a
        Form1.Print a
    End Sub
    Public Function MyTrim(ByRef TempStr As String) As Boolean
      Dim Str1() As String
      Dim I As Long
      Dim TestStr As String
      Str1 = Split(TempStr, " ")
      For I = LBound(Str1) To UBound(Str1)
            TestStr = TestStr & Trim(Str1(I)) &" "
      Next I
      TempStr = TestStr
    End Function