这是使用c#在字符串中跳过下划线(_)之前的字符的最佳方法
本文关键字:最佳 字符 下划线 方法 字符串 | 更新日期: 2023-09-27 18:10:38
这是在使用c#的字符串中跳过下划线_
之前的字符的最佳方法?
eg:case 1 String contains _
string s="abc_defg"
我想获取defg到另一个字符串
案例2
some times string不包含_
。这时我需要得到所有字符串
。
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方式更慢,更复杂的读取)
我将添加超级技巧:正则表达式!!有一种思想流派认为任何事情都可以用正则表达式或jQuery完成!: -)
var rx = new Regex("(?:[^_]*_)?(.*)", RegexOptions.Singleline);
var res = rx.Match(s).Groups[1].Value;
我甚至不会试图向任何人解释这个野兽,所以不要问。这是无用的。(包括Regex和to ask:-))
我不知道如何定义最好的方法,但只要只有一个下划线就可以。
string s1 = "abc_defg";
string s2 = "defg";
Console.WriteLine( s1.Split('_').Last() );
Console.WriteLine( s2.Split('_').Last() );
如果你需要更多的灵活性,你可以看看正则表达式
Regex.Replace(s1, "^.*_", "")
简单函数或许:
public string TakeStringAfterUnderscoreOrWholeString(string input)
{
var underscorePos = input.IndexOf("_");
return underscorePos == -1 ? input : input.Substring(underscorePos+1);
}
实时测试:http://rextester.com/rundotnet?code=AVQO61388
您可以使用LINQ SkipWhile():
textValue.SkipWhile(c => c != separator)
.Skip(1)
两种情况的最终解:
string textValue = "abc_defg";
char separator = '_';
string result = textValue.IndexOf(separator) >= 0
? new String(textValue.SkipWhile(c => c != separator)
.Skip(1)
.ToArray())
: textValue;
编辑:我对xanatos的评论是正确的,但无论如何,有时找到不同的解决方案是很有趣的:)
我建议简单地使用string[] arr和split函数。
string[] arr=s.split('_');
string out=arr[arr.Length-1];