2

我正在尝试使用 InStr 在这样的字符串中查找不是“0”(从左侧开始)的第一个字符:

000000000001
000000004092
000000000052
000000001006

这可以用 InStr 完成,还是我应该使用不同的东西?

4

4 回答 4

4

If you are looking for an index of an item that is not zero (that may also be a non-digit) use this regular expression: [^0]

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

Keep in mind, Regex functions require the following library call:

Imports System.Text.RegularExpressions

This will not work well when the string is composed entirely of zeros, so you may want to modify the expression to allow zero to be the last (or the only) character in the string:

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

如果您使用的是 VB。NET你应该使用 .NET 方法。

一种方法是使用 Enumerable.Wherewhich 是一种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 字符添加到 a 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 回答