我目前从visual Basic中的各个输入框接收String的输入。这是添加到字符串以生成更大的字符串。字符串看起来像这样(不要担心变量名称):
Dim String1 As String = "12345"
在此之后我做的是创建一个在每个数字之间有空格的字符串。这意味着String被转换为this(使用for循环):
Dim newString As String = "1 2 3 4 5"
为此,每当遇到String时,我都会使用split函数将字符串拆分为数组。这将创建一个名为result()的新数组(作为字符串)。
当尝试读取数组中的各个项目时,它会起作用,并且我会返回正确的结果。这是有趣的开始。当单独访问项目并使用" Convert.ToInt32"将它们转换为整数时功能就像一个魅力。它允许我做我想做的事。但是,像这样访问数组中的每个项目都不是一个选项,因为它会很快失控。所以我要做的就是创建一个新的for循环来遍历数组,并将每个项目转换为整数,并在转换它们时将它们加在一起。这就是问题所在。
Dim calcu As Integer = 0
For i As Integer = 0 To result.Length - 1
calcu += Convert.ToInt32(result(i))
Next i
上面的代码是我目前用于将新值添加到数组的代码。然而,这会崩溃并给我以下错误:"输入字符串的格式不正确"。我可以使用什么方法将此字符串转换为整数?
我想要实现的是将字符串中的每个值加在一起,为我提供一个整数值。
答案 0 :(得分:2)
您可以使用此方法获取所需的字符串,其中每个数字用空格分隔:
Dim chars As Char() = String1.ToCharArray()
Dim newString As String = String.Join(" ", chars)
如果您想获取每个数字字符的数值,可以使用Char.GetNumericValue
:
Dim allInts As Int32() = Array.ConvertAll(chars, Function(c) CInt(Char.GetNumericValue(c)))
如果您想要总和,可以使用Enumerable.Sum
:
Dim sumOfInts As Int32 = allInts.Sum()
答案 1 :(得分:1)
另一个选项,允许转换忽略不是数字的所有内容:
Dim String1 As String = "dfdf##%^%&^%^%9 1 xfdsafadf 12dfdfd3 45"
Dim ints As List(Of Integer) = String1.ToCharArray.Where(Function(x) Char.IsDigit(x)).Select(Function(x) CInt(Char.GetNumericValue(x))).ToList
For Each i As Integer In ints
Debug.Print(i)
Next
使用不同的语法:
Dim String1 As String = "dfdf##%^%&^%^%9 1 xfdsafadf 12dfdfd3 45"
Dim ints = From i In String1.ToCharArray
Where Char.IsDigit(i)
Select CInt(Char.GetNumericValue(i))
For Each i As Integer In ints
Debug.Print(i)
Next
然后,无论使用哪种语法,都可以使用Sum(),如前面所示:
Debug.Print("Sum = " & ints.Sum)
*旁注:以上任一版本中的ToCharArray()
部分实际上不是必需的,因为String实现了IEnumerable(Of Char)。