字符串拆分.找到正确的方法

本文关键字:方法 拆分 字符串 | 更新日期: 2023-09-27 18:32:03

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

字符串 ix 是这样的: 00h00m00s虽然 H 前面的 NRS 也可以像 000h00m00s 一样是 3 或 4 .

所以我认为我可以用一个普通的 string.split 来做到这一点,并将最后 3 个取到字符串 1,然后这样做 3 次。(然后删除最后一个以仅保留NR)

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

字符串拆分.找到正确的方法

假设输入与格式匹配#h#m#s其中 # 代表一个或多个十进制数字,则可以使用 String.Split 方法将输入拆分为四个部分,使用 Int32.Parse 方法将前三个部分中的每一个解析为整数,并使用 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}
var fields = input.Split(new[] { "h", "m" , "s" },
                    StringSplitOptions.RemoveEmptyEntries);

为此,正则表达式可能是最好的 - 它是一种定义明确的格式。

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;

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

public static string[] Split(
    string input,
    string pattern
)
var result = Regex.Split(input, @"'D");

正则表达式适用于此任务:

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];