我的价值如下
,.Ad
我控制字符串是否为数字。如果字符串不是数字且非数字,我需要获取非数字值,如下所示
结果必须如下
public void removeChildren(int index) {
MutableTreeTableNode node = root.getChildAt(index);
this.removeNodeFromParent(node);
}
我怎样才能在c#中做到这一点?
答案 0 :(得分:8)
如果非数字是连续的并不重要,那很简单:
string nonNumericValue = string.Concat(value.Where(c => !Char.IsDigit(c)));
如果使用.NET 3.5。正如评论中所提到的那样String.Concat
(或Dmytris answer中的String.Join
)不会超过IEnumerable<string>
,因此您需要创建一个数组:
string nonNumericValue = string.Concat(value.Where(c => !Char.IsDigit(c)).ToArray());
取所有非数字。如果你想取中间部分,那么跳过数字,然后取全部直到下一个数字:
string nonNumericValue = string.Concat(value.SkipWhile(Char.IsDigit)
.TakeWhile(c => !Char.IsDigit(c)));
答案 1 :(得分:2)
正则表达式解决方案(将所有非数字值粘合在一起):
String source = "11,.Ad23";
String result = String.Join("", Regex
.Matches(source, @"\D{1}")
.OfType<Match>()
.Select(item => item.Value));
编辑:您似乎使用旧版本的.Net,在这种情况下,您可以使用简单的代码而无需 RegEx , Linq 等:
String source = "11,.Ad23";
StringBuilder sb = new StringBuilder(source.Length);
foreach (Char ch in source)
if (!Char.IsDigit(ch))
sb.Append(ch);
String result = sb.ToString();
答案 2 :(得分:1)
虽然我喜欢提出的解决方案,但我认为更有效的方法是使用正则表达式,例如
[^\D]
其中称为
var regex = new Regex(@"[^\D]");
var nonNumeric = regex.Replace("11,.Ad23", ""));
返回:
,.Ad
答案 3 :(得分:1)
LINQ解决方案是否适合您?
string value = "11,.Ad23";
var result = new string(value.Where(x => !char.IsDigit(x)).ToArray());