如何在 Visual Basic 中将字符串转换为整数以进行计算
How to convert String to Integer for calculations in Visual Basic
我目前从 Visual Basic 中的各种输入框中接收字符串的输入。这是添加到字符串中以形成更大的字符串。字符串看起来像这样(不用担心变量名):
Dim String1 As String = "12345"
之后我要做的是创建一个字符串,每个数字之间都有空格。这意味着字符串被转换为这个(使用 for 循环):
Dim newString As String = "1 2 3 4 5"
为此,每当遇到字符串时,我都会使用拆分函数将字符串拆分为一个数组。这将创建一个名为 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
上面的代码是我目前用来向数组添加新值的代码。然而,这会崩溃并给我以下错误:"Input string was not in the correct format"。我可以使用什么方法将此字符串转换为整数?
我想要实现的是将字符串中的每个值相加得到一个整数值。
您可以使用此方法获取所需的字符串,其中每个数字由 space:
分隔
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()
另一个选项,允许转换忽略非数字的所有内容:
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(),正如 Tim 之前演示的那样:
Debug.Print("Sum = " & ints.Sum)
*旁注:上述任一版本中的 ToCharArray()
部分实际上都不是必需的,因为 String 实现了 IEnumerable(Of Char)。
我目前从 Visual Basic 中的各种输入框中接收字符串的输入。这是添加到字符串中以形成更大的字符串。字符串看起来像这样(不用担心变量名):
Dim String1 As String = "12345"
之后我要做的是创建一个字符串,每个数字之间都有空格。这意味着字符串被转换为这个(使用 for 循环):
Dim newString As String = "1 2 3 4 5"
为此,每当遇到字符串时,我都会使用拆分函数将字符串拆分为一个数组。这将创建一个名为 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
上面的代码是我目前用来向数组添加新值的代码。然而,这会崩溃并给我以下错误:"Input string was not in the correct format"。我可以使用什么方法将此字符串转换为整数?
我想要实现的是将字符串中的每个值相加得到一个整数值。
您可以使用此方法获取所需的字符串,其中每个数字由 space:
分隔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()
另一个选项,允许转换忽略非数字的所有内容:
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(),正如 Tim 之前演示的那样:
Debug.Print("Sum = " & ints.Sum)
*旁注:上述任一版本中的 ToCharArray()
部分实际上都不是必需的,因为 String 实现了 IEnumerable(Of Char)。