这是在使用c#的字符串中下划线_
之前跳过字符的最佳方法?这是跳过字符之前使用c的字符串中的下划线(_)的最好方法#
如:情况1字符串包含_
string s="abc_defg"
我想DEFG到另一个字符串
情况下2
有时串不包含_
。那时我需要得到全部字符串
例如。
s="defg"
在这两种情况下,我想得到“defg”。仅当字符串中存在下划线时才应用过滤。我怎样才能做到这一点
这是在使用c#的字符串中下划线_
之前跳过字符的最佳方法?这是跳过字符之前使用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
可能是为案件索引== 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;
我甚至不会试图向任何人解释这个野兽,所以不要问。没用的。(无论是正则表达式,并要求:-))
您可以利用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;
编辑:
我与萨那托斯意见是对的,但无论如何,有时找到不同的解决方案是非常有趣:)
简单的功能也许是:
public string TakeStringAfterUnderscoreOrWholeString(string input)
{
var underscorePos = input.IndexOf("_");
return underscorePos == -1 ? input : input.Substring(underscorePos+1);
}
我不知道如何定义的最佳方式,但长期这样工作方式为只有一个下划线。
string s1 = "abc_defg";
string s2 = "defg";
Console.WriteLine(s1.Split('_').Last());
Console.WriteLine(s2.Split('_').Last());
如果你需要更多的灵活性,你可以看看正则表达式。
Regex.Replace(s1, "^.*_", "")
我会建议简单地使用一个字符串[] ARR和分裂功能为此目的。
string[] arr=s.split('_');
string out=arr[arr.Length-1];
感谢您的回答。但这个问题已经回答了。而且如果字符串中有多个下划线?感谢无论如何:) –
在这种情况下如何做你期望的输出是...例如“qwe_etr_uit”应该是什么输出? – iJade
在这种情况下,结果应该是etr_ui。他杰伊,我已经用其他答案:D。所以已经解决了这个问题,我答复了答案。谢谢你的努力 –
你试过了什么? – Oded
@Null指针你也可以使用String.Split – 2011-10-06 10:21:36