0

我无法创建一个文本框,用户可以在其中输入要选择的数字。例如。10-16,18,22-30(就像您选择要打印的页面时一样)但是,我也有一些字母被扔进去,例如它可能是11,11A,12,12A.

我该如何做到这一点,以便当用户输入他们想要的数字时,它会被转移到一个数组中?

我不太擅长解释事情,如果你不明白,请见谅。

4

2 回答 2

1

如果没有输入错误检查并假设带字母的数字无法定义范围,它可能看起来像

        String textInput = "11,11A,12,12A,13-16,18,22-30";
        String[] strArray = textInput.Split(',');
        List<String> pages = new List<String>();
        foreach (String s in strArray)
        {
            String[] range = s.Split('-');
            if (range.Length == 2)
            {
                int startPage = int.Parse(range[0]);
                int endPage = int.Parse(range[1]);
                for (int i = startPage; i<= endPage; i++)
                {
                    pages.Add(i.ToString());
                    pages.Add(i.ToString()+"A");
                }
            }
            else
            {
                pages.Add(s);
            }
        }

        String[] resultArray = pages.ToArray();

        Console.WriteLine("Input: " + textInput);
        foreach (String s in resultArray)
        {
            Console.WriteLine(s);
        }
于 2013-02-21T12:31:44.877 回答
0

您必须从字母表中删除数字部分。然后你可以使用这个 linq 查询:

var txtRange = "16,18,22-30";
var tokens = txtRange.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
.Select(t => new { 
    Token = t, 
    Range =  t.Split(new[] { '-' }, StringSplitOptions.RemoveEmptyEntries)
})
.Select(x => new{ x.Token, x.Range, 
    RangeStart = int.Parse(x.Range[0]),
    RangeEnd = x.Range.Length > 1 ? int.Parse(x.Range[1]) : int.Parse(x.Range[0])
});

int min = tokens.Min(x => x.RangeStart);
int max = tokens.Max(x => x.RangeEnd);

var list = new List<String>() { "11", "11A", "12", "12A", "13", "14", "15", "19" };

var result = list.Select(s => new
{
    Str = s,
    Num = int.Parse(new string(s.Where(Char.IsDigit).ToArray()))
})
.Where(x => x.Num >= min && x.Num <= max);

foreach(var x in result)
    Console.WriteLine("String: {0} Numeric-Part: {1}", x.Str, x.Num);

它正在工作(尽管它似乎有点过于复杂)。

演示

于 2013-02-21T12:39:09.537 回答