如何基于整数发生拆分字符串?

时间:2018-03-30 18:04:45

标签: c# .net

如果一个字符串包含整数,我想根据整数出现将其拆分。怎么做?

string test= "a b cdf 7654321;

然后我想将整数和所有单词存储在它之前,比如

string stringBefore="";
// the integer will be last item
string integer="";  

注意:

在我的情况下,整数总是7位数

2 个答案:

答案 0 :(得分:3)

您可以将Regex.Split与捕获组一起使用以返回分隔符:

var ans = Regex.Split(test, @"("\d{7})");

如果数字位于字符串的末尾,则会返回一个额外的空字符串。如果您知道它始终位于字符串的末尾,则可以对其出现进行拆分:

var ans = Regex.Split(test, @"(?=\d{7})");

答案 1 :(得分:3)

根据你的评论,整数总是7位数,它始终是字符串的最后一项。

在这种情况下,只需使用Substring()

即可
string test = "a b cdf 7654321";
string stringBefore = test.Substring(0, test.Length - 7); 
string integer = test.Substring(test.Length - 7);  

Substring只根据原始字符串的一部分创建一个字符串。

修改

我有点惊讶地发现没有内置的方法可以根据索引轻松地将字符串拆分为两个字符串(也许我错过了它)。我想出了一个LINQ扩展方法来实现我想要做的事情,也许你会发现它很有用:

public static string[] SplitString(this string input, int index)
{
    if(index < 0 || input.Length < index)
        throw new IndexOutOfRangeException();
    return new string[] 
    {
        String.Concat(input.Take(input.Length - index)),
        String.Concat(input.Skip(input.Length - index))
    };      
}

我想如果使用C#7,我宁愿使用ValueTuple,但字符串数组也可以。

掌握一切here