我需要一些建議在這裏瞭解最簡潔的方式來拆分字符串。字符串拆分。找到正確的方法來做到這一點
字符串ix像這樣:00h00m00s
雖然前面的nrs也可以是3或4,如000h00m00s
。
所以我認爲我可以用一個普通的string.split做到這一點,並把最後3個做到string 1,並做3次。 (之後刪除最後一個只保留nr的)
或者如果我使用正則表達式或某些東西,這會是一種更清潔(更好)的方式嗎?我仍然在編碼的學習期間,並想知道你對這種情況的看法。更好的方法是什麼方式,爲什麼?
我需要一些建議在這裏瞭解最簡潔的方式來拆分字符串。字符串拆分。找到正確的方法來做到這一點
字符串ix像這樣:00h00m00s
雖然前面的nrs也可以是3或4,如000h00m00s
。
所以我認爲我可以用一個普通的string.split做到這一點,並把最後3個做到string 1,並做3次。 (之後刪除最後一個只保留nr的)
或者如果我使用正則表達式或某些東西,這會是一種更清潔(更好)的方式嗎?我仍然在編碼的學習期間,並想知道你對這種情況的看法。更好的方法是什麼方式,爲什麼?
假設您的輸入匹配的格式#h#m#s
其中#
代表一個或多個十進制數字,您可以使用String.Split Method到輸入分爲四個部分,Int32.Parse Method每個前三部分的解析爲一個整數和TimeSpan Structure來表示結果:
var parts = "123h45m07s".Split('h', 'm', 's');
// parts == { "123", "45", "07", "" }
var result = new TimeSpan(hours: int.Parse(parts[0]),
minutes: int.Parse(parts[1]),
seconds: int.Parse(parts[2]));
// result == {5.03:45:07}
爲什麼你reccomand拆分,而不是正則表達式例如? – Dante1986 2012-04-23 12:27:11
對於這一點,正則表達式可能會是最好的 - 這是一個良好定義的格式。
var match = Regex.Match(input, @"^(\d+)h(\d+)m(\d+)s$");
var hoursString = match.Groups[1].Value;
var minutesString = match.Groups[2].Value;
var secondsString = match.Groups[3].Value;
雖然把這個給出了「unsconized escape sequence」 – Dante1986 2012-04-24 06:08:13
@ Dante1986,謝謝 - 我的壞,我忘了逃避字符串中的反斜槓。通過更改爲'@'-string來修復它。 – 2012-04-24 11:43:51
正則表達式是適合這項任務:
var regex = new Regex(@"^(?<hours>\d+)h(?<minutes>\d+)m(?<seconds>\d+)s$");
var match = regex.Match("13h44m52s");
if (match.Success) {
var hours = Int32.Parse(match.Groups["hours"].Value);
var minutes = Int32.Parse(match.Groups["minutes"].Value);
var seconds = Int32.Parse(match.Groups["seconds"].Value);
var timeSpan = new TimeSpan(hours, minutes, seconds);
// Use timeSpan ...
}
我會用這個正則表達式來確保數字的號碼,你希望
var match = Regex.Match(input, "^(\d{2,})h(\d{2})m(\d{2})s$");
var h = match.Groups[1];
var m = match.Groups[2];
var s = match.Groups[3];
var fields = input.Split(new[] { "h", "m" , "s" },
StringSplitOptions.RemoveEmptyEntries);
這是什麼?一個約會?如何DateTime.Parse()或ParseExact? – 2012-04-23 11:40:43
正則表達式將是更簡單的方法,這是學習Regex這個非常強大的工具的好方法。 – 2012-04-23 11:40:44