C#中如何正确使用TrimStart()、TrimEnd()方法裁剪字符串
问题描述
我在做字符串解析时写了下面的C#代码:
string str = @"UdPbC\0\s:SI0002,d:IC0002,n:234*66$SIACK," + random.Next(4) + "*C4<CR><LF>\r\n"; str = str.TrimStart('$'); Debug.WriteLine(str);
运行之后输出的字符串和原字符串完全没区别,我想要把字符串里$符号之前的所有内容都裁掉,该怎么实现?
问题原因
你用错TrimStart的功能了。这个方法的逻辑是从字符串的最开头位置开始,连续删除所有你传入的指定字符,直到碰到第一个不在删除列表里的字符就立刻停止,不会遍历整个字符串找你指定的符号。
你的原字符串开头第一个字符是U,根本不是你传入的$,所以TrimStart直接就不做任何处理,输出自然和原字符串一致。
正确实现方法
TrimStart本身就不适合做「删除某个指定字符前所有内容」的场景,直接用IndexOf找$的位置再截取就行:
- 如果你要保留
$本身,用下面的代码:
int dollarPos = str.IndexOf('$'); // 处理字符串里确实存在$的情况,避免索引报错 if (dollarPos != -1) { str = str.Substring(dollarPos); }
- 如果你连开头的
$也不想保留,把截取的起始位置改成dollarPos + 1就可以:
int dollarPos = str.IndexOf('$'); if (dollarPos != -1) { str = str.Substring(dollarPos + 1); }
内容的提问来源于stack exchange,提问作者KooEunBam
相关产品推荐
相关产品推荐

