我希望讓用戶通過以下方式輸入整數:解析包含整數字符串轉換成列表<int>
號碼之間用逗號分隔:1,3,122,64000,27等
數字範圍:37-2000
以上的混合物:55,2,1-10000,65000-65007,2182
我怎樣才能解析一個字符串,可能在上面的任何一種形式結束了一個int列表?
因此,例如:1-5,6,7-8應該給一個列表包含整數1,2,3,4,5,6,7,8
我很新的C#所以一些示例代碼將不勝感激。謝謝。
我希望讓用戶通過以下方式輸入整數:解析包含整數字符串轉換成列表<int>
號碼之間用逗號分隔:1,3,122,64000,27等
數字範圍:37-2000
以上的混合物:55,2,1-10000,65000-65007,2182
我怎樣才能解析一個字符串,可能在上面的任何一種形式結束了一個int列表?
因此,例如:1-5,6,7-8應該給一個列表包含整數1,2,3,4,5,6,7,8
我很新的C#所以一些示例代碼將不勝感激。謝謝。
這工作:
var query =
from x in text.Split(',')
let y = x.Split('-')
let b = int.Parse(y[0].Trim())
let e = int.Parse(y[y.Length - 1].Trim())
from n in Enumerable.Range(b, e - b + 1)
select n;
var result = query.ToList();
我建議加入一些錯誤處理,但如果你輸入了正確的格式這個作品。
**編輯**:.NET 2.0版本。
許多相同的... :-)
謝謝。問題是,我們必須使用.NET 2.0來做到這一點。 – stanleyR
@stanleyR - 我添加了.NET 2.0版本到我的答案。 – Enigmativity
謝謝! x中可能沒有' - ';它可能只是一個整數值。例如,文本可能是1-2,5,222,5-9。這是否處理?再次感謝! – stanleyR
String.split分裂逗號,會給你所有你需要的,然後如果一個組包含 - 再拆分它,你有兩個範圍值
Tokenise基礎上,字符串「」然後解析單個數字或範圍的列表。
從內存中可以看到List上的Split(..)方法,您可以使用它來獲取令牌。然後,只需測試一個' - '的存在(如果它的第一個字符是負數,那麼顯然不是一個範圍)。
你想什麼的結果來自像「1-10000」的範圍列表?是否應該在列表中添加10000個數字? – Guffa
@Guffa:是的,1-10000會將所有從1到10K的數字添加到列表中。例如,1-5將把int 1,2,3,4,5加到列表中。 – stanleyR