在字符串中去除非数字字符

12 浏览
0 Comments

在字符串中去除非数字字符

我想在ASP.NET C#中将字符串中的非数字字符去掉,例如40,595 p.a.会变成40595。\n谢谢。

0
0 Comments

问题:如何从字符串中删除非数字字符?

原因:该问题的出现可能是因为在某些情况下,我们需要从字符串中提取出数字字符,而删除非数字字符。这可能是因为我们需要对字符串进行数值计算或者进行其他只涉及数字字符的操作。

解决方法:下面是一种解决方法,我们可以使用扩展方法来实现删除非数字字符的功能。具体实现如下:

public static string GetNumbers(this string text)
{
    text = text ?? string.Empty;
    return new string(text.Where(p => char.IsDigit(p)).ToArray());
}

这个方法可以用于任何字符串,它首先检查输入的字符串是否为null,如果是null,则将其设置为空字符串。然后,使用LINQ的Where方法和char.IsDigit函数来筛选出只包含数字字符的字符。最后,使用ToArray方法将筛选出的字符转换为字符数组,并使用new string构造函数将字符数组转换为字符串。

此外,还有一个替代方法可以在检查输入字符串是否为null时提高性能。具体实现如下:

public static string GetNumbers(this string text)
{
    if (text == null)
        return string.Empty;
    return new string(text.Where(p => char.IsDigit(p)).ToArray());
}

这个方法直接使用if语句来检查输入的字符串是否为null,如果是null,则直接返回空字符串。这样可以避免不必要的赋值操作,从而提高性能。

通过使用扩展方法和LINQ,我们可以很方便地从字符串中删除非数字字符。在实现中,我们可以选择使用null检查来提高性能。

0
0 Comments

这篇文章讨论了如何从字符串中删除非数字字符的问题,并提供了一种解决方法。

该问题的解决方法是使用正则表达式来替换非数字字符。在给定的示例中,使用了以下代码:

var s = "40,595 p.a.";
var stripped = Regex.Replace(s, "[^0-9]", "");

其中"[^0-9]"可以被@"\D"替代,但是作者更喜欢使用[^0-9],因为它更易读。

对于使用正则表达式在.NET中的性能开销,有人提出了好奇的问题。作者回答说,这取决于.NET如何实现正则表达式、Lambda表达式的编译方式等因素,只有通过测量才能知道具体的性能开销。虽然使用正则表达式可能会更慢一些,但它比使用IsDigit()函数更灵活,因为你可以在正则表达式中添加'.'字符以允许带小数的数字。

此外,还有人对比了正则表达式和LINQ在一个由100,000个GUID连接而成的字符串上的性能差异。结果发现,使用LINQ的方法比使用正则表达式的方法快5倍以上。

此外,使用LINQ的方法也可以轻松扩展,例如使用...Where(c => char.IsDigit(c) || char=='.')...。尽管正则表达式在这种情况下更紧凑,但使用LINQ的方法更加灵活。

这种使用正则表达式的方法非常简洁有效,适用于从字符串中删除非数字字符的需求。

0
0 Comments

问题:如何从字符串中删除非数字字符?

原因:在某些情况下,我们可能需要从字符串中删除非数字字符。例如,当我们需要将一个字符串转换为数字时,我们需要确保字符串中只包含数字字符,否则转换将失败。

解决方法:以下是一种解决方法,该方法使用C#编程语言实现。该方法使用了LINQ库中的方法来处理字符串。

首先,我们定义一个名为GetNumbers的私有静态方法,该方法接受一个字符串作为参数。方法内部的代码使用了LINQ的Where方法和IsDigit方法来过滤出字符串中的数字字符。然后,使用ToArray方法将过滤后的字符转换为字符数组。最后,使用字符串的构造函数将字符数组转换为字符串,并将其作为方法的返回值。

代码如下:

private static string GetNumbers(string input)
{
    return new string(input.Where(c => char.IsDigit(c)).ToArray());
}

在上述代码中,我们使用了IsDigit方法来判断一个字符是否为数字字符。这是因为IsNumber方法不仅包括数字字符,还包括其他一些字符,如分数、下标、上标、罗马数字等。

如果需要保留数字之间的空格,可以将Where方法的条件扩展为`input.Where(c => char.IsDigit(c) || char.IsWhiteSpace(c))`。

此外,我们还可以进一步简化代码,将其写成`return new string(input.Where(char.IsDigit).ToArray());`。这样做可以提高代码的可读性。

最后,还有一些建议:可以考虑将函数的名称从'GetNumbers'更改为'GetDigits',以使其意图更加明确。另外,使用此方法时,需要添加`using System.Linq;`语句,以引入LINQ库中的方法。

0