在C#中用一行代码替换字符串中的多个字符

17

我的疑问是是否有可能在一个字符串中替换多个字符(例如,&、|和$字符)而不必多次使用.Replace()函数?目前我是这样使用它的:

return inputData.Replace('$', ' ').Replace('|', ' ').Replace('&', ' ');

不过这太糟糕了,我想知道是否有类似的小型但同样有效的替代品。

编辑:谢谢大家的回答,不幸的是我没有达到15个声望以投票。


请查看https://dev59.com/3Gct5IYBdhLWcg3wjuAj,简而言之,除非你想让代码不那么易读,否则实际上没有替代方案。 - Dutts
4个回答

41
你可以使用 Regex.Replace
string output = Regex.Replace(input, "[$|&]", " ");

甚至不需要转义,+1 - Sergey Berezovskiy

7
您可以使用Split函数和String.Join来实现以下操作:
String.Join(" ", abc.Split('&', '|', '$'))

测试代码:

static void Main(string[] args)
{
     String abc = "asdfj$asdfj$sdfjn&sfnjdf|jnsdf|";
     Console.WriteLine(String.Join(" ", abc.Split('&', '|', '$')));
}

应该是 ...Join(" ", ... 吧? - Marc Gravell

1

可以使用Regex来实现,但如果你因某些原因想要避免它,可以使用以下静态扩展:

public static string ReplaceMultiple(this string target, string samples, char replaceWith) {
    if (string.IsNullOrEmpty(target) || string.IsNullOrEmpty(samples))
        return target;
    var tar = target.ToCharArray();
    for (var i = 0; i < tar.Length; i++) {
        for (var j = 0; j < samples.Length; j++) {
            if (tar[i] == samples[j]) {
                tar[i] = replaceWith;
                break;
            }
        }
    }
    return new string(tar);
}

使用方法:

var target = "abc123abc123";
var replaced = target.ReplaceMultiple("ab2", 'x');
//replaced will result: "xxc1x3xxc1x3"

0

关于什么:

return Regex.Replace(inputData, "[\$\|\&]", " ");

1
这段代码无法编译。您必须对正则表达式进行双重转义,或者在字符串前加上@前缀。 - fero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接