哪个是使用c#跳过字符串中下划线(_)前的字符的最佳方法

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".仅当字符串中有下划线时才应用过滤.我怎样才能做到这一点

xan*_*tos 6

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)

我甚至不会向任何人解释这个野兽,所以不要问.这毫无用处.(正则表达式和要求:-))

  • 嘿,你为什么要使用我的大炮?;) (2认同)

Jon*_*röm 6

我不知道如何定义最好的方法,但只要只有一个下划线就可以.

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)