就像我已经解释过的标题一样,我想获得一个字符串的子串(包含一个地址),我想只有街道..
不可能只采用文本(非数字)字符,因为这样就会保留该框。 在第一个空格之前不可能使用子字符串,因为街道名称可以包含空格..
例如'developerstreet 123a' - >想要'developerstreet' 'a'是房子的箱号,我对此不感兴趣。
如何在VB.NET中执行此操作?
答案 0 :(得分:4)
解析地址是非常困难的,所以我提醒你要确保你非常慎重地考虑你做出的选择。我强烈建议您查看邮政服务提供的文件。如果这些是美国地址,您应该首先查看USPS Publication 28。
但是,要回答您的具体问题,您可以使用Char.IsDigit
方法找到字符串中第一个数字字符的索引。您可能还想查看Char.IsNumber
方法,但这可能比您真正想要的更具包容性。例如,这将获得input
字符串中第一个数字字符的索引:
Dim index As Integer = -1
For i As Integer = 0 to input.Length - 1
If Char.IsDigit(input(i)) Then
index = i
Exit For
End If
Next
但是,对于复杂的字符串解析,我会建议学习正则表达式。使用RegEx
:
Dim m As Match = Regex.Match(input, "^\D+")
If m.Success Then
Dim nonNumericPart As String = m.Value
End If
以下是上例中正则表达式的含义:
^
- 匹配的字符串必须从行的开头\D
- 任何非数字字符+
- 一次或多次答案 1 :(得分:0)
试试这个:
Private Sub MyFormLoad(sender As Object, e As EventArgs) Handles Me.Load
Dim str As String = "developerstreet 123a"
Dim index As Integer = GetIndexOfNumber(str)
Dim substr As String = str.Substring(0, index)
MsgBox(substr)
End Sub
Public Function GetIndexOfNumber(ByVal str As String)
For n = 0 To str.Length - 1
If IsNumeric(str.Substring(n, 1)) Then
Return n
End If
Next
Return -1
End Function
输出将是:developerstreet
答案 2 :(得分:0)
text.Substring(0, text.IndexOfAny("0123456789"))