我正在尝试将字符串分成2个部分。第一个在第一个连字符之前,第二个在第一个连字符之后,但包括之后的所有连字符。不要在两个字符串中的任何一个中包含第一个连字符。
例如,使用以下输入字符串:
9077-this is a string - with a hyphen
string1
应该是9077
,而string2
应该是this is a string - with a hyphen
。
我可以通过以下方式获得string1
:
Dim string1 As String = hyphenHold.Substring(0, hyphenHold.IndexOf("-")).Trim
但是我不知道如何获得连字符的另一面。
答案 0 :(得分:5)
您可以将String.Split
与带有最大计数的重载一起使用:
string[] bothparts = hyphenHold.Split(new[]{'-'}, 2);
string string1 = bothparts[0];
string string2 = bothparts[1];
如果要使用Substring
(或使用Remove
的{{1}}):
Substring
VB.NET:
int index = hyphenHold.IndexOf('-');
string1 = hyphenHold.Remove(index); // same as hyphenHold.Substring(0, index)
string2 = hyphenHold.Substring(index+1);
答案 1 :(得分:3)
只需执行与您相同的操作,但更改参数即可。如果仅传递一个参数,则SubString将结束。
Dim hyphenHold As String = "9077-this is a string - with a hyphen"
Dim string1 As String = hyphenHold.Substring(0, hyphenHold.IndexOf("-")).Trim
Dim string2 As String = hyphenHold.Substring(hyphenHold.IndexOf("-") + 1).Trim
答案 2 :(得分:1)
在这种情况下,我将是第一个正则表达式过大的人。但是,它确实提供了一些优点。
如果这些东西中的任何一项对您来说都很重要,请使用正则表达式的示例:
Dim pattern As String = "^(?<before>[^-]+)-(?<after>.+)$"
Dim m As Match = Regex.Match(input, pattern)
If m.Success Then
Dim before As String = m.Groups("before").Value
Dim after As String = m.Groups("after").Value
End If