Nul*_*ter 4 c# string filtering
哪个是_使用c#跳过字符串中下划线前的字符的最佳方法?
例如:case 1 String包含_
string s="abc_defg"
Run Code Online (Sandbox Code Playgroud)
我想要defg到另一个字符串
案例2
有些时候字符串不包含_.那时我需要得到所有字符串
例如.
s="defg"
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,我想得到"defg".仅当字符串中有下划线时才应用过滤.我怎样才能做到这一点
string s="abc_defg";
int ix = s.IndexOf('_');
s = ix != -1 ? s.Substring(ix + 1) : s;
Run Code Online (Sandbox Code Playgroud)
在这里使用三元运算符是没用的,写得更好:
s = s.Substring(ix + 1);
Run Code Online (Sandbox Code Playgroud)
直接使用Substring可能针对案例索引== 0进行优化的事实
这是你想要的吗?
但有人建议使用LINQ加农炮,所以
var temp = s.SkipWhile(p => p != '_').Skip(1);
s = temp.Any() ? new string(temp.ToArray()) : s;
Run Code Online (Sandbox Code Playgroud)
在.NET 4.0中有一种新string.Concat方法.
s = temp.Any() ? string.Concat(temp) : s;
Run Code Online (Sandbox Code Playgroud)
(请注意,通常LINQ方式较慢且读取较复杂)
我将添加超级技能:正则表达式!有一种思想流派可以用正则表达式或jQuery完成任何事情!:-)
var rx = new Regex("(?:[^_]*_)?(.*)", RegexOptions.Singleline);
var res = rx.Match(s).Groups[1].Value;
Run Code Online (Sandbox Code Playgroud)
我甚至不会向任何人解释这个野兽,所以不要问.这毫无用处.(正则表达式和要求:-))
我不知道如何定义最好的方法,但只要只有一个下划线就可以.
string s1 = "abc_defg";
string s2 = "defg";
Console.WriteLine( s1.Split('_').Last() );
Console.WriteLine( s2.Split('_').Last() );
Run Code Online (Sandbox Code Playgroud)
如果您需要更多灵活性,可以查看正则表达式.
Regex.Replace(s1, "^.*_", "")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1503 次 |
| 最近记录: |