在使用 C# 的字符串中,在下划线 _
之前跳过字符的最佳方法是什么?
例如:情况1 字符串包含_
string s="abc_defg"
我想将 defg 转换为另一个字符串
案例2
有时字符串不包含 _
。那时我需要得到所有的字符串
例如。
s="defg"
在这两种情况下,我都想得到“defg”。仅当字符串中有下划线时才应用过滤。我该怎么做
最佳答案
string s="abc_defg";
int ix = s.IndexOf('_');
s = ix != -1 ? s.Substring(ix + 1) : s;
这里用三目运算符没什么用,最好这样写:
s = s.Substring(ix + 1);
直接使用 Substring
可能针对 case index == 0 优化的事实
这是你想要的吗?
但是有人建议使用 LINQ 大炮,所以
var temp = s.SkipWhile(p => p != '_').Skip(1);
s = temp.Any() ? new string(temp.ToArray()) : s;
在 .NET 4.0 中有一个新的 string.Concat
方法。
s = temp.Any() ? string.Concat(temp) : s;
(请注意,通常 LINQ 方式更慢且阅读起来更复杂)
我将添加 ultrakill:正则表达式!!!有一种观点认为任何事情都可以用正则表达式或 jQuery 来完成! :-)
var rx = new Regex("(?:[^_]*_)?(.*)", RegexOptions.Singleline);
var res = rx.Match(s).Groups[1].Value;
我什至不会尝试向任何人解释这个野兽,所以不要问。这毫无用处。 (正则表达式和询问:-))
关于c# - 这是使用 c# 在字符串中的下划线 (_) 之前跳过字符的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7672937/