c# 替换字符串中字符选择的每个实例

标签 c# replace

我找到了很多与此类似的引用文献,但似乎没有一个正是我所追求的,所以希望有人能提供帮助。
简单来说,我想获取用户输入的字符串(进入 Winform 输入),首先去掉所有空格,然后用英国货币符号 (£) 替换任何“非法”字符列表。要求是要使用输入,但进程生成的文件具有修改后的文件名。
我写了一个函数(基于扩展方法)但它没有按预期工作:

public static class ExtensionMethods
    {
        public static string Replace(this string s, char[] separators, string newVal)
        {
            var temp = s.Split(separators, StringSplitOptions.RemoveEmptyEntries);
            return String.Join(newVal, temp);
        }
    }

public static string RemoveUnwantedChars(string enteredName, char[] unwanted, string rChar)
    {
        return enteredName.Replace(unwanted, rChar);
    }

在我的代码中,我调用了两次:

char[] blank = { ' ' };
string ename = Utilities.RemoveUnwantedChars(this.txtTableName.Text, blank, string.Empty);

char[] unwanted = { '(', ')', '.', '%', '/', '&', '+' };
string fname = Utilities.RemoveUnwantedChars(ename, unwanted, "£");

如果我输入的字符串至少包含一个空格、上面的所有字符和一些其他字母(例如,“(GH) F16.5% M X/Y&1+1”),我会得到以下结果:
ename = "(GH)F16.5%MX/Y&1+1"- 这是正确的,因为它删除了空白。
fname = "GH£F16£5£MX£Y£1£1"- 这没有正常工作,因为它没有替换第一个字符而是删除了它。
其余字符已被正确替换。只有当其中一个“非法”字符位于字符串的开头时才会发生 - 如果我的字符串是“G(H) F16.5% M X/Y&1+1”,我会正确地得到“G£H£F16£” 5£MX£Y£1£1"。它还将多个“非法”字符替换为一个“£”,因此“M()GX+.1”将变为“M£GX£1”,但应为“M££GX££1”。

最佳答案

我认为问题出在您的 Replace 扩展中。你在这一行 split

var temp = s.Split(separators, StringSplitOptions.RemoveEmptyEntries);

您正在删除导致意外结果的空条目。改用这个:

var temp = s.Split(separators, StringSplitOptions.None);

关于c# 替换字符串中字符选择的每个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36397985/

相关文章:

c# - Entity Framework Code First 对象实例化回调

mysql - SQL - 在数字上使用嵌套替换

c# - 在 C# 中创建列表列表

c# - 有没有办法强制应用程序以单线程方式运行?

java - 字符串替换函数无法正确替换字符 - Java

java - Android addToBackStack(null) 不起作用,关闭应用程序

MYSql多次替换查询

Python lambda if 语句 re.sub

c# - LINQ to SQL 无法创建数据库 [架构权限]

c# - 使用 NetworkStream.BeginRead 和 NetworkStream.EndRead 实现超时