首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将字符串拆分为多个较小的字符串

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

Stack Overflow用户
提问于 2017-05-31 09:55:45
回答 3查看 106关注 0票数 0

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

100个移动电话号码将总共用99个逗号分隔。我试图编写的代码是拆分包含逗号小于100的字符串。

代码语言:javascript
复制
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位。

有人能指导我如何做到这一点吗?提前谢谢你。

EN

回答 3

Stack Overflow用户

发布于 2017-05-31 10:05:46

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

代码语言:javascript
复制
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;
    }
}

示例:

代码语言:javascript
复制
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));
}
票数 3
EN

Stack Overflow用户

发布于 2017-05-31 10:19:51

你有几个选择

  1. 在输入数据上添加某种掩码,以防止用户输入无效数据。在您的UI中,您可以标记错误并提示用户重新输入正确的信息。如果你沿着这条路走,那么像这个string[] nums = numbers.Split(',');这样的东西就可以了。
  2. 或者,您可以使用regex.split或regex.match并在模式上进行匹配。如果您的数字是以带前导逗号或空格的字符串表示的,这样的操作应该有效。 Regex regex =新的Regex(“(\s\x,)\d{10},)"; string[] num=regex.Split(数);
票数 0
EN

Stack Overflow用户

发布于 2017-05-31 11:16:47

这可以通过一个简单的Linq代码来解决。

代码语言:javascript
复制
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));
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44281542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档