2017-05-31 186 views
0

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

100个手机号码将以99个逗号分隔。我试图代码是拆分包含逗号小于100

public static IEnumerable<string> SplitByLength(this string str, int maxLength) 
    { 
    for (int index = 0; index < str.Length; index += maxLength) { 
    yield return str.Substring(index, Math.Min(maxLength, str.Length - index)); 
    } 
} 

字符串使用上面的代码,我可以达到100个号码为100号将有10 * 100(用于移动电话号码)+99(为逗号)文本长度。但这里的问题是用户可能输入错误的手机号码,如9位数字甚至11位数字。

任何人都可以指导我如何实现这一目标。 预先感谢您。

+4

解决这样你的问题不是分裂,但输入端的验证? – Steve

+0

“用户可能输入错误的手机号码”,但当然您的用户将始终正确使用逗号?似乎你需要在进一步处理之前验证你的输入。 –

+1

*请勿*使用此类字段。如果有的话,用户很难正确输入数据。一个快速和肮脏的解决方案将是使用多行文本框。对于人来说,换行符远比逗号好得多。更好的是,使用显示所有项目的*可编辑组合框*。您可以单独验证修改的项目。您只需要一个“添加”按钮来添加新项目。 –

回答

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)); 
} 
0

您有几种选择,

  1. 把一些输入数据中的一种掩码可防止用户输入无效数据。在您的用户界面中,您可以标记错误并提示用户重新输入正确的信息。如果你走这条路,那么像这样的string[] nums = numbers.Split(',');就可以。
  2. 或者,您可以使用regex.split或regex.match并匹配模式。这样的事情应该工作,假设你的号码是在一个字符串中带有前导逗号或空格

    正则表达式regex = new Regex(“(\ s |,)\ d {10},)”;

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

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)); 
    } 
} 
相关问题