字符串拆分。找到正确的方法来做到这一点

时间:2012-04-23 11:38:04

标签: c# string split

我在这里需要一些建议来理解分割字符串最干净的方法。

字符串ix如下:00h00m00s虽然h前面的nrs也可以是3或4,如000h00m00s

所以我认为我可以使用普通的string.split执行此操作并将最后3个执行到字符串1,并执行此操作3次。 (之后删除最后一个只保留nr)

如果我使用正则表达式或其他东西,这会是一个更干净(更好)的方式吗? 我还在编码的学习期间,想知道你对这种情况的看法。更好的方法是什么,为什么?

6 个答案:

答案 0 :(得分:2)

假设您的输入符合#h#m#s格式#代表一个或多个小数位,您可以使用String.Split Method将输入分为四个部分{{3}将前三个部分中的每一个解析为整数,并使用Int32.Parse Method来表示结果:

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}

答案 1 :(得分: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;

答案 2 :(得分:1)

var fields = input.Split(new[] { "h", "m" , "s" },
                    StringSplitOptions.RemoveEmptyEntries);

答案 3 :(得分:0)

您可以使用this正则表达式方法:

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

var result = Regex.Split(input, @"\D");

答案 4 :(得分: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 ...
}

答案 5 :(得分: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];