1

Visual Basic 2010 で、ユーザーが入力した文字列に各長さの単語が何回出現するかをリストするプログラムを作成しています。ほとんどのプログラムは動作していますが、問題が 1 つあります。

文字列内のすべての文字をループするとき、プログラムは次の文字があるかどうかをチェックします (プログラムが存在しない文字をループしようとしないようにするため)。たとえば、次の条件を使用します。

If letter = Microsoft.VisualBasic.Right(input, 1) Then

whereletterは文字、inputは文字列で、文字Microsoft.VisualBasic.Right(input, 1)列から右端の文字を抽出します。したがって、文字が右端の文字である場合、プログラムは文字列のループを停止します。

ここで問題が発生します。文字列が であるとしましょうThis sentence has five words。右端の文字は ですが、4 番目と 6 番目の文字もsansです。つまり、1 番目と 2 番目sは、他のものと同じようにループを破ります。

私の質問は、最後のs、または文字列の最後の文字がループを破ることができるようにする方法があるかどうかです。

4

2 に答える 2

0

これには、Neolisk が示すように、いくつかの方法を使用できます。他にもいくつかあります:

Dim breakChar As Char = "s"
Dim str As String = "This sentence has five words"

str = str.Replace(".", " ")
str = str.Replace(",", " ")
str = str.Replace(vbTab, " ")
' other chars to replace

Dim words() As String = str.ToLower.Split(New Char() {" "}, StringSplitOptions.RemoveEmptyEntries)
For Each word In words
    If word.StartsWith(breakChar) Then Exit For
    Console.WriteLine("M1 Word: ""{0}""  Length: {1:N0}", word, word.Length)
Next

何らかの理由で文字をループする必要がある場合は、次のようなものを使用できます。

Dim breakChar As Char = "s"
Dim str As String = "This sentence has five words"

str = str.Replace(".", " ")
str = str.Replace(",", " ")
str = str.Replace(vbTab, " ")
' other chars to replace

'method 2
Dim word As New StringBuilder
Dim words As New List(Of String)

For Each c As Char In str.ToLower.Trim

    If c = " "c Then
        If word.Length > 0 'support multiple white-spaces (double-space etc.)
            Console.WriteLine("M2 Word: ""{0}""  Length: {1:N0}", word.ToString, word.ToString.Length)
            words.Add(word.ToString)
            word.Clear()
        End If
    Else
        If word.Length = 0 And c = breakChar Then Exit For
        word.Append(c)
    End If
Next

If word.Length > 0 Then
    words.Add(word.ToString)
    Console.WriteLine("M2 Word: ""{0}""  Length: {1:N0}", word.ToString, word.ToString.Length)
End If

必要に応じて調整するように、単語の最初の文字で区切るためにこれらを特別に書きました。

于 2012-10-21T09:38:38.917 に答える
0

ユーザーが入力した文字列に各長さの単語が何回出現するかを計算する VB.NET コード:

Dim sentence As String = "This sentence has five words"
Dim words() As String = sentence.Split(" ")
Dim v = From word As String In words Group By L = word.Length Into Group Order By L

行 2 を調整して、句読点を削除したり、余分なスペースを削除したりする必要がある場合があります。

上記の例では、v(i)単語の長さがv(i).Group.Count含まれており、この長さの単語がいくつ検出されたかが含まれています。デバッグの目的で、このグループに属するすべての単語を含むv(i).Groupの配列であるもあります。String

于 2012-10-21T01:20:19.663 に答える