0

文字列を分割する最もクリーンな方法を理解するために、ここでアドバイスが必要です。

文字列 ix は次のようになります: 00h00m00sh の前の nrs は、 のように 3 または 4 にすることもできます000h00m00s

だから私は通常の string.split でこれを行うことができ、最後の 3 を文字列 1 に取り、これを 3 回行うことができると思います。(その後、最後のものを削除して、nrのみを保持します)

または、正規表現などを使用すると、これはよりクリーンな(より良い)方法になりますか?私はまだコーディングの学習期間にあり、そのような場合についてどう思うか知りたいです。より良い方法は何ですか?またその理由は何ですか?

4

6 に答える 6

2

入力が1つ以上の10進数を表す形式と一致すると仮定すると、String.Splitメソッドを使用し#h#m#sて入力4つの部分に分割し、Int32.Parseメソッドを使用して最初の3つの部分をそれぞれ整数に解析し、結果を表すTimeSpan構造:#

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}
于 2012-04-23T11:43:53.690 に答える
1
var fields = input.Split(new[] { "h", "m" , "s" },
                    StringSplitOptions.RemoveEmptyEntries);
于 2012-04-23T11:49:24.507 に答える
1

これには、おそらく正規表現が最適です。これは明確に定義された形式です。

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;
于 2012-04-23T11:42:59.060 に答える
0

この 正規表現メソッドを使用できます。

public static string[] Split(
    string input,
    string pattern
)

var result = Regex.Split(input, @"\D");
于 2012-04-23T11:42:12.480 に答える
0

このタスクには正規表現が適しています。

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 ...
}
于 2012-04-23T11:46:04.477 に答える
0

私はあなたが期待する桁数を確保するためにこの正規表現を使用します

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];
于 2012-04-23T11:46:12.013 に答える