替换字符串中的char

时间:2010-09-13 20:55:42

标签: c# asp.net string replace

如何改变

XXX@YYY.ZZZ进入XXX_YYY_ZZZ

我知道的一种方法是使用string.replace(char,char)方法,

但我想替换“@”& “”上面的方法只替换了一个char。

如果我有XX.X@YYY.ZZZ ......

,还有一个案例

我仍然希望输出看起来像XX.X_YYY_ZZZ

这可能吗?任何建议,谢谢

7 个答案:

答案 0 :(得分:8)

因此,如果我理解正确,您希望将@替换为_,将.替换为_,但仅当.来在@之后?如果有保证@(假设您正在处理电子邮件地址?):

string e = "XX.X@YYY.ZZZ";
e = e.Substring(0, e.IndexOf('@')) + "_" + e.Substring(e.IndexOf('@')+1).Replace('.', '_');

答案 1 :(得分:4)

这是一个完整的正则表达式解决方案,涵盖了您的案例。第二种情况的关键是使用正面的后视来匹配@符号后面的点。

string[] inputs = { "XXX@YYY.ZZZ", "XX.X@YYY.ZZZ" };
string pattern = @"@|(?<=@.*?)\.";

foreach (var input in inputs)
{
    string result = Regex.Replace(input, pattern, "_");
    Console.WriteLine("Original: " + input);
    Console.WriteLine("Modified: " + result);
    Console.WriteLine();
}

虽然这很简单,可以通过几个字符串Replace调用完成。根据文本大小和代码替换次数,您需要测试效率。

答案 2 :(得分:3)

答案 3 :(得分:3)

您可以使用以下扩展方法进行替换,而不会创建太多临时字符串(如使用Substring和Replace)或产生正则表达式开销。它会跳到@符号,然后遍历剩余的字符以执行替换。

public static string CustomReplace(this string s)
{
    var sb = new StringBuilder(s);
    for (int i = Math.Max(0, s.IndexOf('@')); i < sb.Length; i++)
        if (sb[i] == '@' || sb[i] == '.')
            sb[i] = '_';
    return sb.ToString();
}

答案 4 :(得分:0)

你可以链替换

var newstring =    "XX.X@YYY.ZZZ".Replace("@","_").Replace(".","_");

答案 5 :(得分:0)

创建一个包含您想要替换的字符的数组,循环遍历数组并根据索引进行替换。

答案 6 :(得分:0)

假设数据格式类似于XX.X@YYY.ZZZ,这是String.Split(char seperator)的另一种选择:

string[] tmp = "XX.X@YYY.ZZZ".Split('@');
string newstr = tmp[0] + "_" + tmp[1].Replace(".", "_");