替换字符串中的多个字符

时间:2017-05-13 09:10:58

标签: c#

大家都有一个程序正常工作但返回")Hi("之类的字符串 它应该是"(Hi)"所以我需要将'('替换为')'并替换 ')' '(' s.Replace('(',')').Replace(')','(') 这听起来很容易

")Hi("
诀窍是在第一次替换字符串之后更改 第二次更换后"(Hi("")Hi)"将更改两个字符 决赛将成为SubSystem 请帮助

5 个答案:

答案 0 :(得分:1)

您还可以使用regex替换。

s = System.Text.RegularExpressions.Regex.Replace(s, @"[)](\w+)[(]", "($1)");

答案 1 :(得分:0)

你不能使用Replace,因为它在整个字符串上运行它的替换操作,而不是char的char。

一个简单的蛮力解决方案可能是这个

void Main()
{
    // A dictionary where every key points to its replacement char
    Dictionary<char, char> replacements = new Dictionary<char, char>()
    {
        {'(', ')'},
        {')', '('},
    };

    string source = ")Hi(";

    StringBuilder sb = new StringBuilder();
    foreach (char c in source)
    {
        char replacement = c;
        if(replacements.ContainsKey(c))
            replacement = replacements[c];
        sb.Append(replacement,1);

    }
    Console.WriteLine(sb.ToString());
}

您可以在扩展方法中将其转换为静态类

public static class StringExtensions
{
    public static string ProgressiveReplace(this string source, Dictionary<char, char> replacements)
    {
        StringBuilder sb = new StringBuilder();
        foreach (char c in source)
        {
            char replacement = c;
            if (replacements.ContainsKey(c))
                replacement = replacements[c];
            sb.Append(replacement, 1);
        }
        return sb.ToString();
    }
}

并使用

从您的代码中调用它
Dictionary<char, char> replacements = new Dictionary<char, char>() 
{{'(', ')'},{')', '('}};
s = s.ProgressiveReplace(replacements);

答案 2 :(得分:0)

方法1 ) 使用以下内容:

var requiredString = string.Join(string.Empty, str.Select(x=>{if (x == '(') x = ')';  else if (x == ')') x = '('; return x;}));

方法2 ) 或者您可以使用以下扩展方法:

public static class StringExtensions
{
    public static string ReplaceMultiple(this string source, Dictionary<char, char> replacements)
    {
        return string.Join(string.Empty , source.Select(x=>Replace(x,replacements)));
    }

    private static char Replace(char arg, Dictionary<char, char> replacements)
    {
        if(replacements.ContainsKey(arg))
            arg = replacements[arg];
        return arg;
    }
}

此方法可按如下方式使用:

        var rep = new Dictionary<char, char> 
        { 
            { ')', '(' }, 
            { '(', ')' }, 
            // { '#', '*' }, 
            // { '*', '#' } 
        };


        var c = str.ReplaceMultiple(rep);

答案 3 :(得分:0)

boolean sudoku(int[][] grid) {
    for (int i = 0; i <9; i++) {
        int row = 0, col = 0, group = 0;
        for (int j = 0; j <9; j++) {
            // check for row i
            row += grid[i][j];

            // check for col i
            col += grid[j][i];

            // check for sub-grid i
            group += grid[i / 3 * 3 + j / 3][i % 3 * 3 + j % 3];
        }

        if (row != 45 || col != 45 || group != 45)  return false;
    }

    return true;
}

答案 4 :(得分:0)

Regex.Replace可让您处理每个Match(需要using System.Text.RegularExpressions;):

string result = Regex.Replace(")Hi(", @"\(|\)", m => m.Value == "(" ? ")" : "(");

替代方案可以用其他东西替换其中一个字符:

string result = ")Hi(".Replace('(', '\0').Replace(')', '(').Replace('\0', ')');