检查数组中的字符串

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.IsDigitChar.IsNumber 混淆了。根据文档,IsDigit 只会匹配 0 - 9。 Char.IsDigit 是 Char.IsNumber 的一个子集...并且根据环境,一些泰语符号返回为数字,这是错误的.. IsDigit 可能有用,但同时它没有以防万一。【参考方案3】:

您的语法不正确。应该是:

If IsNumeric(Mid(arr(i), 5, 1)) Then

【讨论】:

以上是关于检查数组中的字符串的主要内容,如果未能解决你的问题,请参考以下文章

检查数组中的所有元素是不是都是字符串[重复]

如何检查一个字符串数组是不是包含 JavaScript 中的一个字符串? [复制]

如何检查字符串是不是包含数组中的任何元素[关闭]

使用 C# 检查字符串是不是包含字符串数组中的字符串

如何检查字符串是不是匹配数组中的正则表达式之一?

检查字符串是不是包含Python中数组中的多个元素