将字符串拆分为多个较小的字符

时间:2017-05-31 09:55:46

标签: c# string split

我有一个多行文本框,其中包含以逗号分隔的10位数手机号码。我需要在至少100个手机号码组中实现字符串。

100个手机号码将以99个逗号分隔。我想编写的是分割包含逗号小于100的字符串

{{1}}

通过使用上面的代码,我可以获得100个数字,因为100个数字将具有 10 * 100(对于手机号码)+99(对于逗号)文本长度。但问题是用户可能输入错误的手机号码,如9位数甚至11位数。

任何人都可以指导我如何实现这一目标。 提前谢谢。

3 个答案:

答案 0 :(得分:3)

您可以使用此扩展方法将它们放入max-100数字组:

public static IEnumerable<string[]> SplitByLength(this string str, string[] splitBy, StringSplitOptions options, int maxLength = int.MaxValue)
{
    var allTokens = str.Split(splitBy, options);
    for (int index = 0; index < allTokens.Length; index += maxLength)
    {
        int length = Math.Min(maxLength, allTokens.Length - index);
        string[] part = new string[length];
        Array.Copy(allTokens, index, part, 0, length);
        yield return part;
    }
}

样品:

string text = string.Join(",", Enumerable.Range(0, 1111).Select(i => "123456789"));
var phoneNumbersIn100Groups = text.SplitByLength(new[] { "," }, StringSplitOptions.None, 100);
foreach (string[] part in phoneNumbersIn100Groups)
{
    Assert.IsTrue(part.Length <= 100);
    Console.WriteLine(String.Join("|", part));
}

答案 1 :(得分:0)

您有几个选择,

  1. 在输入数据上放置某种掩码,以防止用户输入无效数据。然后,在您的UI中,您可以标记错误并提示用户重新输入正确的信息。如果你沿着这条路走下去,那么IntTC之类的东西就可以了。
  2. 或者,您可以使用regex.split或regex.match并匹配模式。假设你的数字在带有前导逗号或空格的字符串中,这样的东西应该可以正常工作

    正则表达式正则表达式=新正则表达式(&#34;(\ s |,)\ d {10},)&#34 ;;

    string [] nums = regex.Split(numbers);

答案 2 :(得分:0)

这可以通过简单的Linq代码解决

public static IEnumerable<string> SplitByLength(this string input, int groupSize)
{
    // First split the input to the comma.
    // this will give us an array of all single numbers
    string[] numbers = input.Split(',');

    // Now loop over this array in groupSize blocks
    for (int index = 0; index < numbers.Length; index+=groupSize)
    {
        // Skip numbers from the starting position and 
        // take the following groupSize numbers, 
        // join them in a string comma separated and return 
        yield return string.Join(",", numbers.Skip(index).Take(groupSize));
    }
}