2

InStrを使用して、次のような文字列で「0」(左側から開始)ではない最初の文字を見つけようとしています。

000000000001
000000004092
000000000052
000000001006

これはInStrで実行できますか、それとも別のものを使用する必要がありますか?

4

4 に答える 4

4

ゼロではない(数字以外の場合もある)アイテムのインデックスを探している場合は、次の正規表現を使用します。[^0]

Dim pos as Integer = Regex.Match(str, "[^0]").Index

正規表現関数には、次のライブラリ呼び出しが必要であることに注意してください。

Imports System.Text.RegularExpressions

文字列が完全にゼロで構成されている場合、これはうまく機能しないため、式を変更して、ゼロが文字列の最後の(または唯一の)文字になるようにすることができます。

`([^0])|(0$)`
          ^--- This meta-character matches an end-of-string marker
于 2012-08-20T13:38:40.590 に答える
2

VBを使用している場合。NETでは、.NETメソッドを使用する必要があります。

Enumerable.Where1つの方法は、次のLinq方法を使用 することです。

Dim value = "000000000001"
Dim firstNotZero = From c In value Where c <> "0"c
If firstNotZero.Any Then
    Dim first As Char = firstNotZero.First
End If

編集:LinqまたはRegexを使用したくない場合は、単純なループを使用することもできます。

Dim lines = {"000000000001", "000000004092", "000000000052", "000000001006"}
Dim firstDigits As New List(Of Char)
For Each line In lines
    For Each c In line
        If c <> "0"c Then
            firstDigits.Add(c)
            Exit For
        End If
    Next
Next

これにより、最初に0文字ではないすべての文字が。に追加されますList(Of Char)

于 2012-08-20T13:45:03.120 に答える
1

正規表現を使用します。

Regex.Match(yourString, "[1-9]")
于 2012-08-20T13:37:38.567 に答える
0

のパラメータを「否定」する方法はありませんInStr

入力がわかっている場合は、そこにあるべきではないものを簡単に検索できます(おそらく正規表現を使用して)。

入力文字の範囲はどのくらいですか?などの詳細がなければ、答えとして一般的でないものを提供することは困難です。どのルールが試合を支配しますか?これはどのように使用されますか?

于 2012-08-20T13:37:34.083 に答える