有效的方法来替换字符串值

时间:2014-04-07 23:31:26

标签: c#

从DB中读取<YYYY><MM><DD>之类的值,将此值传递给我的日期格式,如(&#34; YYYYmmdd&#34;)

date = DateTime.Now;
YYMMVal = date.ToString(DateFormat);

我正在使用替换功能来获取我的日期格式,如下所示

strDateFormat = strDTF.ToString();
string LessThanFormat = strDateFormat.Replace("<", "");
string greaterThanFormat = LessThanFormat.Replace(">", "");
String yearFormats = greaterThanFormat.Replace("Y", "y");
String MonthFormat = yearFormats.Replace("m", "M");
string DateFormat = MonthFormat.Replace("D", "d");

StringBuilder srtbDateFormat = new StringBuilder(strDateFormat);
                               srtbDateFormat.Replace("<", "");
                               srtbDateFormat.Replace(">", "");
                               srtbDateFormat.Replace("Y", "y");
                               srtbDateFormat.Replace("m", "M");
                               srtbDateFormat.Replace("D", "d");

YYMMVal = date.ToString(srtbDateFormat.tostring());

替换上述字符串并与日期格式匹配的有效方法是什么?

4 个答案:

答案 0 :(得分:4)

你所拥有的东西似乎很明智,而且相当容易理解。这是留下它的好理由。

此外,如果您的格式字符串仅限于年,月和日期组件,加上&lt;和&gt;字符,只有这么多组合可能。您可以提前设置Dictionary<string, string>并使用您预期的每个输入字符串预先播种它,映射到所需的输出。

这假设你在某种循环中这样做。如果你只需要做一次,那没关系。

答案 1 :(得分:2)

您可以使用Dictionary

string input = "<YYYY><MM><DD>";
var pairs = new Dictionary<char, char> { { 'Y', 'y' }, { 'm', 'M' }, { 'D', 'd' } };

string format = new string(
        string.Concat(input
            .Split(new[] {'<', '>'}, StringSplitOptions.RemoveEmptyEntries))
            .Select(x =>
            {
                if (pairs.ContainsKey(x))
                    return pairs[x];
                return x;
            }).ToArray()
        );

答案 2 :(得分:1)

简单的方法是使用Replace方法的输出是另一个字符串并将调用链接在一起这一事实:

        string inputDateFormat = "<YYYY><MM><DD>";
        string outputDateFormat = inputDateFormat.Replace("<", "")               
                                                 .Replace(">", "") 
                                                 .Replace("Y", "y")
                                                 .Replace("m", "M")
                                                 .Replace("D", "d");

答案 3 :(得分:0)

如果我理解正确,您希望将<YYYY><MM><DD>转换为YYYYmmdd。 有几种方法可以做到这一点,但如果它只是一个日期格式字符串,为什么不从头开始提供格式字符串呢?

选择哪种方式并不重要,<YYYY><MM><DD>将始终转换为YYYYmmdd,因此您始终知道该函数的确切输出。

如果您的DATE格式为<YYYY><MM><DD>,这意味着它如下所示:<2012><06><03>那么您应该看一下celerno的答案。