乐闻世界logo
搜索文章和话题

How can you strip non-ASCII characters from a string? (in C#)

2 个月前提问
1 个月前修改
浏览次数16

1个答案

1

在C#中,删除字符串中的非ASCII字符可以通过多种方法实现。ASCII字符是从0到127的字符,因此任何超出这范围的字符都可以被认为是非ASCII字符。以下是几种常见的方法来实现这一需求:

方法1:使用正则表达式

利用正则表达式是一种非常直接的方法来过滤非ASCII字符。下面是一个示例代码:

csharp
using System; using System.Text.RegularExpressions; public class Program { public static void Main() { string input = "Hello, world! Привет мир!"; string output = Regex.Replace(input, @"[^\x00-\x7F]", string.Empty); Console.WriteLine(output); } }

上述代码中,正则表达式[^\x00-\x7F]表示匹配所有非ASCII字符,然后我们使用string.Empty来替换这些字符,即删除它们。

方法2:使用LINQ

可以使用LINQ来过滤字符串中的所有非ASCII字符,如下所示:

csharp
using System; using System.Linq; public class Program { public static void Main() { string input = "Hello, world! Привет мир!"; string output = new string(input.Where(c => c <= 127).ToArray()); Console.WriteLine(output); } }

这段代码通过LINQ的Where方法过滤出所有ASCII字符(即字符代码小于或等于127的字符),然后将结果字符数组转换回字符串。

方法3:使用StringBuilder

如果你想手动检查每个字符,或者需要在处理过程中执行额外的逻辑,可以使用StringBuilder

csharp
using System; using System.Text; public class Program { public static void Main() { string input = "Hello, world! Привет мир!"; StringBuilder sb = new StringBuilder(); foreach (char c in input) { if (c <= 127) { sb.Append(c); } } string output = sb.ToString(); Console.WriteLine(output); } }

这里,我们遍历字符串中的每个字符,检查其ASCII值是否小于或等于127,如果是,则将其添加到StringBuilder中。

以上方法中,你可以选择最适合你的场景的一种。如果对性能有高要求,通常情况下,正则表达式的方法可能相对较慢,而使用LINQ或StringBuilder会更快一些,尤其是对于较长的字符串。

2024年7月30日 00:26 回复

你的答案