第一个连字符后的String的SubString,在之后包括连字符

时间:2019-01-15 17:02:19

标签: .net vb.net

我正在尝试将字符串分成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

但是我不知道如何获得连字符的另一面。

3 个答案:

答案 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