1

我正在尝试将每行中的日期格式从逗号更改为连字符。分隔月、日、日和年的逗号索引会有所不同。

   lines_in_List[i] = lines_in_List[i].Insert(0, cnt + ","); // Insert Draw # in 1st column

   string one_line = lines_in_List[i];
   // 0,5,1,2012,1,10,19,16,6,36,,,
   // 1,11,5,2012,49,35,23,37,38,28,,,
   // 2,12,10,2012,8,52,53,54,47,15,,,
   //  ^-^--^ replace the ',' with a '-'.

   StringBuilder changed = new StringBuilder(one_line);
   changed[3] = '-';
   changed[5] = '-';
   changed[3] = '-';
   lines_in_List[i] = changed.ToString();
}
4

2 回答 2

3

您可以使用 IndexOf 的重载,它采用初始偏移量来开始搜索。

http://msdn.microsoft.com/en-us/library/5xkyx09y.aspx

int idxFirstComma = line.IndexOf(',');
int idxSecondComma = line.IndexOf(',', idxFirstComma+1);
int idxThirdComma = line.IndexOf(',', idxSecondComma+1);

使用这些索引进行替换。

要有效地替换这些字符(不创建大量临时字符串实例),请查看:

http://www.dotnetperls.com/change-characters-string

该片段将字符串转换为字符数组,进行替换并创建一个新字符串。

于 2012-10-04T21:39:58.800 回答
1

你也可以这样做:

string modifiedLine = Regex.Replace(line, @"(^\d+,\d+),(\d+),(\d+)", @"$1-$2-$3")

如果您需要在行首修剪空格,请改用:

string modifiedLine = Regex.Replace(line, @"^[ \t]*(\d+,\d+),(\d+),(\d+)", @"$1-$2-$3")

最后,如果您只想检索格式化的日期,请使用:

string justTheDate = Regex.Replace(line, @"^[ \t]*\d+,(\d+),(\d+),(\d+).*", @"$1-$2-$3")
于 2012-10-04T21:49:35.387 回答