我正在尝试使用 InStr 在这样的字符串中查找不是“0”(从左侧开始)的第一个字符:
000000000001
000000004092
000000000052
000000001006
这可以用 InStr 完成,还是我应该使用不同的东西?
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
如果您使用的是 VB。NET你应该使用 .NET 方法。
一种方法是使用 Enumerable.Where
which 是一种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)
。
使用正则表达式:
Regex.Match(yourString, "[1-9]")
没有办法“否定” 的参数InStr
。
如果您知道输入,您可以简单地搜索不应该出现的内容(可能使用正则表达式)。
如果没有详细信息,很难给你一些不那么笼统的答案,例如 - 输入字符的范围是多少?比赛有哪些规则?这个要怎么用?