看到一个面试题:用一行代码去掉字符串(如",a,b,c,")的首尾逗号,至少两种方法
我想到的方法是:
string test = ",a,b,c,";
var one=test.Trim(new char[] { ',' });
var two=test.Replace(",", " ").Trim().Replace(" ", ",");
var three=test.TrimEnd(new char[] { ',' }).TrimStart(new char[] { ',' });
有没有其他方法?
你的第二种是不对的,如果string中间有空格和逗号,就会都被替换成逗号。其实这道面试题很蛋疼,没什么意义。1 3 是对的,不过可以写的好看点: test.Trim(','); 看起来舒服点,本质是一样的。非要再来一个的话:
string three = new string(s.Where((ch, n) => n > 0 && n < s.Length - 1 || ch != ',').ToArray());
关键要看题目是怎么要求的,如果字符串为:
string test=",,a,b,c,,";
你这种方法也有问题。
如果string中间跟示例一样比较规则的话,还有一种方案:
var four = string.Join(",", test.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries));
@artwl: 发现我的方案跟一楼的一样,哈哈
@artwl: 如果是test= ",,a,b,c,,",那就得问面试官:第2个逗号到底算不算是“首”,倒数第二个逗号算不算是“尾”。
var four = test.Substring(1, 5);
var five = String.Join(",", test.Split(',').Where(x=>!string.IsNullOrEmpty(x)));
@上善若水123: 对于four: 你是在逗我?对于你的five:中间有连续两个逗号的就不对了,比如 ,a,,,,b,c.
@上善若水123: 你怎么不直接写 var four = "a,b,c";
你这上面的也不是一行代码 只不过你连写了而已啊