如何在包含n个字符的C#的子字符串上切片字符串?

时间:2019-02-03 20:10:15

标签: c# linq generics

该函数获取一个数字字符串(例如“ 23559009”)和子字符串的长度值(例如2),我需要实现该函数,以便它将数字值切成数字字符串(例如“ 23” ,“ 35”,“ 55”,“ 59”,“ 90”,“ 00”,“ 09”),并将这些数据作为数组返回。

现在我有用于测试的初始代码:

using System;

public static class Series
{
    public static string[] Slices(string numbers, int sliceLength)
    {
        int digits = numbers.Length;

        if(digits != null || digits > sliceLength || sliceLength < 1)
            throw new ArgumentException();
        else 
            {
                string[] dgts = {"1", "2"};
                return dgts;
            }
    }
}

3 个答案:

答案 0 :(得分:6)

使用Linq:

public static string[] Slices(string numbers, int sliceLength) =>
    Enumerable.Range(0, numbers.Length - sliceLength + 1).
               Select(i => numbers.Substring(i, sliceLength)).
               ToArray();

请注意,最后一个字符将被忽略+您可能需要验证参数(numbers不为null且sliceLength> 0)。

Fiddle

答案 1 :(得分:1)

为此的子字符串代码将具有很大的冗余性。将字符串发送到char数组,然后执行循环

private PriorityQueue<Queue<Customer>> queue = new PriorityQueuee<Queue<Customer>>();  

请记住,这是伪的,您需要的一切都在这里,您只需创建变量,并确保语法正确。

在行中的

:for(int i = 0; i

这两个代表您要分割的值,

在行中的

:字符串持有者= charray [i] + charray [i + 1];  您需要添加另一个字符,用于拆分的数量。即3将是:

字符串持有人= charray [i] .toString()+ charray [i + 1] .toString + charray [i + 2];

请记住,如果拆分值(在您的情况下为两个)定期更改,则可以嵌套另一个for循环

答案 2 :(得分:1)

在评估不正确的输入时会出现一些错误,因此使用正常的for循环获取结果并不困难

public string[] Slices(string numbers, int sliceLength)
{
    int digits = numbers.Length;
    string[] result = new string[numbers.Length + 1 - sliceLength];
    if (digits < sliceLength || sliceLength < 1)
        throw new ArgumentException();
    else
    {
        for(int x = 0; x < numbers.Length + 1 - sliceLength; x++)
            result[x] = numbers.Substring(x, sliceLength);
        return result;
    }
}