首页 / C#开发 / 正文

C#/.NET应用程序编程开发中如何替换字符串中的多个字符?

6860 1 发布于: 2019-06-28 读完约需8分钟

问题描述

C#/.NET应用程序编程开发中,如果要替换一个字符串中的单个字符,可以使用string.Replace()方法,比如我们要将以下字符串中的横线替换成空格,则可以:

var str = "replace-multiple-characters-in-a-c-sharp-string";
str = str.Replace("-"," ");
Console.WriteLine(str);

那如果要同时替换字符串中的多个字符,又应该怎么操作呢?

比如,现要替换以下字符串中的多个字符(;,\r\n\t)为换行符\n

var str = "replace;multiple,characters\tin;a,c\rsharp,string";

是不是使用多个Replace()方法呢,如:

str = str.Replace(';', '\n').Replace(',', '\n').Replace('\r', '\n').Replace('\t', '\n');

首先,这样操作的结果是没有问题的,但如果替换的字符中动态的呢,比如可能替换(;,\r\n\t)中的一个或者几个,又怎么实现呢?

方案一

使用正则表达式可实现动态替换,如下(完整示例):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

public class Program
{
  public static void Main()
  {
      var str = "replace;multiple,characters\tin;a,c\rsharp,string";
      var result = ReplaceMultiple(str, "[;,\t\r]|[\n]{2}");
      Console.WriteLine(result);
  }

  private static string ReplaceMultiple(string input, string pattern)
  {
      var result = Regex.Replace(input, pattern, "\n");
      return result;
  }
}

输出结果:

replace
multiple
characters
in
a
c
sharp
string

方案二

使用string.Split()方法分词,然后再合并,如下:

char[] separators = new char[]{' ',';',',','\r','\t','\n'};

string s = "replace;multiple,characters\tin;a,c\rsharp,string";
string[] temp = s.Split(separators, StringSplitOptions.RemoveEmptyEntries);
s = String.Join("\n", temp);

方案三

使用LinqAggregate()扩展方法,如下:

string s = "replace;multiple,characters\tin;a,c\rsharp,string";
char[] chars = new char[] { ' ', ';', ',', '\r', '\t', '\n' };
string snew = chars.Aggregate(s, (c1, c2) => c1.Replace(c2, '\n'));

或者封装成一个静态扩展方法,如下:

public static string ReplaceAll(this string seed, char[] chars, char replacementCharacter)
{
    return chars.Aggregate(seed, (str, cItem) => str.Replace(cItem, replacementCharacter));
}

调用示例:

string snew = s.ReplaceAll(chars, '\n');

方案四

使用StringBuilder的静态扩展方法,如下:

public static void MultiReplace(this StringBuilder builder, 
    char[] toReplace,
    char replacement)
{
    var set = new bool[256];
    foreach (var charToReplace in toReplace)
    {
        set[charToReplace] = true;
    }
    for (int i = 0; i < builder.Length; ++i)
    {
        var currentCharacter = builder[i];
        if (set[currentCharacter])
        {
            builder[i] = replacement;
        }
    }
}

调用示例:

var builder = new StringBuilder("my bad,url&slugs");
builder.MultiReplace(new []{' ', '&', ','}, '-');
var result = builder.ToString();

温馨提示:本文标注有(完整示例)的示例代码可以直接粘贴在try.dot.net中运行。

版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。

上一篇: C#/.NET应用程序编程开发中如何检测一个实例对象为指定的数据类型?

下一篇: ASP.NET Core应用程序编程开发中如何从querystring中获取参数和对应参数值?

本文永久链接码友网 » C#/.NET应用程序编程开发中如何替换字符串中的多个字符?

分享扩散:

发表评论

登录用户才能发表评论, 请 登 录 或者 注册