我正在尝试将每行中的日期格式从逗号更改为连字符。将月份和日期与年份分开的逗号索引会有所不同。
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();
}
答案 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")