web-dev-qa-db-ja.com

VB.NETで文字列の最後の「、」区切り文字を削除する

これは私のコードです:

With ad.Tables(2)
    For i As Integer = 0 To .Rows.Count - 1
        If .Rows(i)("name") & "" <> "" Then
            temp &= .Rows(i)("name") & ", "
        End If
    Next
End With
temp = temp.Trim(",")
testing &= "&Name=" & temp & vbCrLf

これで、文字列の最後にカンマが入ります。しかし、私がするなら

temp = temp.Trim.Trim(",")

すべてのコンマが削除されます。

すべてのカンマを保持し、最後のカンマのみを削除するにはどうすればよいですか?

16
gerfe
temp = temp.TrimEnd(CChar(","))

それでうまくいくので、一番簡単な方法だと思います。

16
Captain America
temp = temp.Trim().Substring(0, temp.Length - 1)

または

temp = temp.Trim().Remove(temp.Length - 1)
15
Hans Olsson

ループ内で区切り文字を設定すると、トリム/余分な文字を回避できます

Dim delimiter as string = ""
For i As Integer = 0 To .Rows.Count - 1
   If .Rows(i)("name") & "" <> "" Then
      temp &= delimiter & .Rows(i)("name")
      delimiter = ","
   End If
Next
3
Alex K.

Trim()関数にはChar()(文字の静的配列)パラメータがあり、Charを明示的に渡す必要はありません。

_' VB.Net Version
", Hello ^_^ ^_^ ,,, , ,,   ,, ,".Trim({" "c, ","c})

//C# version
", Hello ^_^ ^_^ ,,, , ,,   ,, ,".Trim({' ', ','})
_

出力を生成します

_"Hello ^_^ ^_^"
_

マルチパラメータ.Trim()は、指定された文字を文字列の最初と最後の両方から削除します。先頭または末尾のみを削除する場合は、それぞれ.TrimStart()または.TrimEnd()を使用します。

1
SsJVasto

これは機能します:

dim AlarmStr as string="aaa , bbb , ccc ,  "
AlarmStr = AlarmStr.Remove(AlarmStr.LastIndexOf(","))
1
One Day

私は少し奇妙なことを知っていますが、これは私にとってはうまくいくことがわかりました:

Visual Basic:

毎回:mystring = "today、I love out out、、、、"(カンマとスペースが5つ未満)

mystring.Trim.TrimEnd(",").Trim.TrimEnd(",").Trim.TrimEnd(",").Trim.TrimEnd(",").Trim.TrimEnd(",")
0
nghiavt

OPのコードサンプルに基づいて、_String.Join_を使用したり、StringBuilderを使用して出力を作成したりすることを提案した人はいないでしょうか。

_Dim names As New List(Of String)
With ad.Tables(2)
    For i As Integer = 0 To .Rows.Count - 1
        ' DataRow("columnName").ToString() returns value or empty string if value is DbNull
        If .Rows(i)("name").ToString() <> "" Then
           names.Add(.Rows(i)("name"))
        End If
    Next
End With

Dim temp As String = String.Join(", ", names)
testing &= "&Name=" & temp & vbCrLf
_

LINQとDataRowを使用すると、拡張メソッド.Field(Of T)のコードがシンプルになります

_Dim names = ad.Tables(2).
    AsEnumerable().
    Select(row => row.Field<String>("name")).
    Where(name => String.IsNullOrEmpty(name) = False)

Dim temp As String = String.Join(", ", names)
testing &= "&Name=" & temp & vbCrLf
_

さらに先に進む場合は、StringBuilderを使用して文字列を作成し、Aggregateメソッドを使用してコレクションから文字列を作成できます(推奨)

0
Fabio

最後のコンマを追加する前に、ループが終了したかどうかを確認してください。 #クリーナー

While dr.Read
   For c As Integer = 0 To dr.FieldCount - 1
       s.Append(dr(c).ToString.Trim)

       'This line checks if the loop is ending before adding a comma           
       If (c < dr.FieldCount - 1) Then s.Append(",")

   Next
   s.Append(vbCrLf)
End While
0
Robert Barrueco
temp = temp.TrimEnd()

これにより、文字列から末尾のスペースが削除されます。

0
shradha