C#用逗号替换字符串中的两个特定逗号

时间:2012-10-04 21:36:12

标签: c# string

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

   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();
}

2 个答案:

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

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

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