我正在尝试编写一个用户输入电话号码的程序,如果它包含一个字母,则会显示一条消息。
Module Module1
Sub Main()
Dim TelNumber As String
Dim Character As String
TelNumber = Console.ReadLine()
For Number = 0 To TelNumber.Length - 1
Character = TelNumber.Substring(Number)
If Integer.TryParse(Character, 0) <> 0 Then
Console.WriteLine("It cannot contain a letter")
Exit For
End If
Next
Console.ReadLine()
End Sub
结束模块
然而,使用此代码即使它只能在字符串包含少于11个字符的情况下才能正常工作,之后即使它不包含任何字母,它仍会显示该消息。我该如何解决?另外我不明白Integer.TryParse函数的第二个参数代表什么?
答案 0 :(得分:1)
TelNumber.Substring(Number)
不只是字符串的Number
字符。
它返回从开头剥离Number
个字符的字符串。
因此,在循环的第一步中,TelNumber.Substring(0)
返回整个字符串。
然后,Integer.TryParse()
失败,整数溢出为长字符串。
提示:简单字符串验证是regular expressions的任务。
使用正则表达式,将tel.number格式扩展为+4915771828000
或12-34-56
也很容易。
Imports System.Text.RegularExpressions
Module Module1
Sub Main()
Dim telNumber As String = Console.ReadLine()
Dim telValidationRegex As Regex = New Regex("^\d+$")
If NOT telValidationRegex.Match(telNumber).Success Then
Console.WriteLine("Wrong telephone number format")
End If
Console.ReadLine()
End Sub
End Module
答案 1 :(得分:0)
我没有编译器方便,但我可以告诉你我认为这应该是什么样子。首先让我们看看Int32.TryParse's documentation
结果 键入:System.Int32
当此方法返回时,如果转换成功,则包含等效于s中包含的数字的32位有符号整数值;如果转换失败,则包含零。如果s参数为null或String.Empty,格式不正确,或者表示小于MinValue或大于MaxValue的数字,则转换失败。此参数未初始化传递。
因此,第二个参数应该是一个整数变量,其中包含尝试解析字符串的结果。
然后,让我们看一下substring
的startIndex 键入:System.Int32 此实例中子字符串的从零开始的字符位置。
所以你所做的不是查看每个字符并尝试将其转换为整数。它正在查看整数,并尝试将其转换为整数。然后整数,除了第一个字符,并尝试将其转换为数字。等等。
我怀疑你会发现Int32只能存储大约10位数的数字(2 ^ 32,或4294967296)
你想要做的就是看每个角色,就像这样。
Module Module1
//Warning, did not try to compile
Sub Main()
Dim TelNumber As String
Dim Character As String
TelNumber = Console.ReadLine()
For Number = 0 To TelNumber.Length - 1
Character = TelNumbert(Number)
Dim OutputNumber as Integer
If Not Integer.TryParse(Character, OutputNumber) Then
Console.WriteLine("It cannot contain a letter")
Exit For
End If
Next
Console.ReadLine()
End Sub
End Module