检查数组中的字符串
Posted
技术标签:
【中文标题】检查数组中的字符串【英文标题】:Check string in an array 【发布时间】:2017-01-24 02:16:07 【问题描述】:我将字符串存储在一个数组中,需要检查每个字符串的第 5 个字符是否为数字。我使用的代码是:
If Mid(arr(i), 5, 1) = IsNumeric(True) Then
MsgBox("Number")
End If
报错:
Microsoft.VisualBasic.dll 中出现“System.InvalidCastException”类型的未处理异常
附加信息:从字符串“”到类型“布尔”的转换无效。
【问题讨论】:
Conversion from string "" to type 'Boolean' is not valid.
是一个直截了当的问题。您正在将boolean
传递给函数(true),而不是可以评估为数字的对象......这是您真正的问题。也转Option Strict On
,是你的朋友..
@Zaggler 这是一个的问题。
我知道,但这就是错误。当解决这个问题时,他有更多...... ????
【参考方案1】:
您最初将您的问题标记为vba,但VBA 不会抛出System.InvalidCastException
,或任何其他与此相关的异常; vb.net 会。
如果True
是数字,则IsNumeric(True)
返回True
。您想验证从数组中检索到的字符串是否为数字;给它从数组中检索到的字符串作为参数:
If IsNumeric(Mid(arr(i), 4, 1)) Then
MsgBox("Number")
End If
您的代码读起来像 VB6/VBA,因为:
Imports Microsoft.VisualBasic
该命名空间包含您根本不需要使用的类似 VB6 的东西。 .net 的美妙之处在于一切都是对象,因此假设数组是String
的数组,您可以调用实际的String
实例方法,而不是VB6 的Mid
函数。
Dim theFifthCharacter As String = arr(i).Substring(4, 1)
或者,因为您只对 1 个字符感兴趣,而 String
本身就是 IEnumerable(Of Char)
,您可以这样做:
Dim theFifthCharacter As Char = arr(i)(4)
请注意 .net 中的一对一索引从 0 开始,因此如果您想要第 5 个项目,您将获取索引 4。
现在,如果你想看看它是否是数字,你可以try来解析它:
Dim digitValue As Integer
If Int32.TryParse(theFifthCharacter, digitValue) Then
'numeric: digitValue contains the numeric value
Else
'non-numeric: digitValue contains an Integer's default value (0)
End If
最后,如果你想要一个消息框,请使用 WinForms 的 MessageBox
而不是 VB6 的 MsgBox
:
Dim digitValue As Integer
If Int32.TryParse(theFifthCharacter, digitValue) Then
'numeric: digitValue contains the numeric value
MessageBox.Show(string.Format("Number: 0", digitValue))
Else
'non-numeric: digitValue contains an Integer's default value (0)
MessageBox.Show("Not a number")
End If
【讨论】:
很好的解释和细节!【参考方案2】:更正确的方法是:
If Char.IsDigit(arr(i)(4)) Then
【讨论】:
看到这是惯用的 .net 代码,它没有在Microsoft.VisualBasic
命名空间中使用 VB6 垃圾,我很好奇这里可能会被否决的原因是什么。
使用Char.IsDigit()
允许某些字符返回true,它们甚至不在正确的ASCII 范围内。我的观点,Integer.TryParse
是一种更好的方法,确保它肯定落在 0-9 之间......同时解释为什么 OP 有这个错误会很有用,以便 OP 可以理解问题。
@Zaggler,我认为您将Char.IsDigit
与Char.IsNumber
混淆了。根据文档,IsDigit
只会匹配 0 - 9。
Char.IsDigit 是 Char.IsNumber 的一个子集...并且根据环境,一些泰语符号返回为数字,这是错误的.. IsDigit 可能有用,但同时它没有以防万一。【参考方案3】:
您的语法不正确。应该是:
If IsNumeric(Mid(arr(i), 5, 1)) Then
【讨论】:
以上是关于检查数组中的字符串的主要内容,如果未能解决你的问题,请参考以下文章