【发布时间】:2014-12-05 14:16:47
【问题描述】:
我们需要将包含dd/mm/yyyy 格式的日期的字符串转换为ddmmyyyy 格式(如果您想知道我为什么将日期存储在字符串中,我的软件会处理批量交易文件,这是一个银行使用的基于行的文本文件格式)。
我目前正在这样做:
string oldFormat = "01/01/2014";
string newFormat = oldFormat.Replace("/", "");
果然,这会将"01/01/2014" 转换为"01012014"。但我的问题是,替换是一步完成的,还是会创建一个中间字符串(例如:"0101/2014" 或 "01/012014")?
这就是我问这个的原因:
我正在处理大小从几千字节到数百兆字节不等的事务文件。到目前为止,我还没有遇到性能/内存问题,因为我仍在使用非常小的文件进行测试。但是当涉及到兆字节时,我不确定这些额外的字符串是否会出现问题。我怀疑会是这样,因为strings are immutable。对于数百万条记录,这种额外的内存消耗将大大增加。
我已经在使用StringBuilders 来创建输出文件。而且我也知道discarded strings will be garbage collected(在时间结束前的某个时间点)。我想知道是否有更好、更有效的方法来替换字符串中所有出现的特定字符/子字符串,这种方法不会另外创建字符串。
【问题讨论】:
-
您应该尝试使用 Regex.Replace,并比较性能。我曾经不得不从大小约为 1MB 的文件中删除不必要的 NewLine 字符,而正则表达式有很大的不同(以分钟为单位......)虽然我必须进行条件替换和其他一些文本操作,所以我建议在这个确切的情况
-
我认为它只为整个替换分配一个字符串。每次替换都不是一个字符串。
-
String ReplaceInternal是外部实现的方法。我认为我们无法知道幕后发生的事情。