C#实现字符替换的三种方法


Author:云都小生


最简单粗暴的方法


C#封装了Replace的方法,这个方法及其它的参数是这样的。

string Replace(替换的目标,替换的字符串)

返回值是替换后的字符串

string str = "11xx1111x";
Console.WriteLine("原字符串是:{0}",str);
Console.Write("请输入需要替换的字符串:");
string oldStr = Console.ReadLine();
Console.Write("请输入替换的字符串:");
string newStr = Console.ReadLine();
str = str.Replace(oldStr,newStr);
Console.WriteLine("替换后的字符串:{0}", str);


比较简单粗暴的方法


using System.Text.RegularExpressions;

Console.Write("请输入一个字符串:");
string str = Console.ReadLine();
Console.Write("要修改的字符或字符串是:");
string oldStr = Console.ReadLine();
Console.Write("要修改为:");
string newStr = Console.ReadLine();
string[] newStrs = Regex.Split(str, oldStr);
string newString = string.Join(newStr,newStrs);
Console.WriteLine(newString);

首先用Split方法把字符串按照oldStr分割开,这个时候会返回字符串数组。接着再用join方法,在每个字符串结尾插入oldStr。

例如说111x1111x111,按照x分割之后变成了一个字符串数组,元素分别是:111、1111、111。

join方法可以在这个字符串数组的每个结尾增加另一个字符串,这个时候返回的是一个string。


比较考验逻辑的方法



这个是我们指导员上课提到的题目,用现有的字符串方法,包括Split、IndexOf、 Substring,实现字符串替换。

怎么去做呢?

static string Replace1(string str,string oldStr,string newStr)
{
    Console.WriteLine("将字符串中的{0}替换成{1}···",oldStr,newStr);
    StringBuilder strBuffer = new StringBuilder();
    int start = 0;
    int tail = 0;

    //一旦找不到需要替换的字符串(第一次IndexOf返回-1)
    //就说明没有该关键字符串,可以直接返回之前的字符串
    if (str.IndexOf(oldStr) == -1)
    {
        Console.WriteLine("没有找到需要替换的关键字符串!");
        return str;
    }

    //每次都不断循环,查找这个x
    //一旦找到了,就把它之前和上一个x之后的字符串拼接起来
    while(true)
    {
        start = str.IndexOf(oldStr,start);
        if (start == -1)
        {
            break;
        }
        strBuffer.Append(str.Substring(tail,start-tail));
        strBuffer.Append(newStr);
        start += oldStr.Length;
        tail = start;
    }

    //查找到最后一个位置之后
    //还要把剩下的字符串拼接进去
    strBuffer.Append(str.Substring(tail));
    return strBuffer.ToString();
}

可以看到我这里用了StringBuilder的类,拼接字符串效率更高。

2017/12/14 11:54:43 @Author:云都小生

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值