我无法创建一个文本框,用户可以在其中输入要选择的数字。例如。10-16,18,22-30
(就像您选择要打印的页面时一样)但是,我也有一些字母被扔进去,例如它可能是11,11A,12,12A
.
我该如何做到这一点,以便当用户输入他们想要的数字时,它会被转移到一个数组中?
我不太擅长解释事情,如果你不明白,请见谅。
如果没有输入错误检查并假设带字母的数字无法定义范围,它可能看起来像
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);
}
您必须从字母表中删除数字部分。然后你可以使用这个 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);
它正在工作(尽管它似乎有点过于复杂)。