C#TrimStart奇怪的行为

时间:2017-11-01 07:22:28

标签: c#

嘿,伙计们只是想了解一些事情。

我有这段代码:

        var testString = "DA DDDLY DO:DAXS      D/B#BTN A   TIME/DTE:0027/01NOV";
        var testTrimStart = testString.TrimStart("DA ".ToCharArray());

testTrimStart输出:

  

LY DO:DAXS D / B#BTN A TIME / DTE:0027 / 01NOV

有人可以解释原因吗

  

DA DDD

已删除。

我能理解它是否

   DA DA DDDLY DO ....

我知道它正在搜索的是CHAR类型的数组。但它不应该是搜索和替换

  

“DA”

整个字符串?

这是.NET FIDDLE链接

1 个答案:

答案 0 :(得分:4)

你说:

  • 删除字符串开头的每个字符'D''A'或空格。

TrimStart中记录了if first character of string is either a 'D', a 'A', or a space then remove that character and repeat this algorithm for the next character (which is now the first) 的行为:

  

从当前String对象中删除数组中指定的字符集的所有前导出现。

(我的重点)

基本上TrimStart方法是伪代码:

Regex.Replace(testString, "^DA ", string.Empty);

实际实施比这更优化,但这是你可以总结的方式。

如果你的意思是:

  

从字符串的开头删除此特定子字符串(如果存在)

然后有两种方法:

  • 使用正则表达式

    if (testString.StartsWith("DA "))
        testString = testString.Substring(3); // 3 == length of "DA "
    
  • 使用子字符串和比较

    自己查找
        String urlParameters = "data=" + gson.toJson(Object).toString();
    

如果你这样:

  • 简单替换

那么你不能保证在字符串的最开始就会发生替换。