如何在字符串的字符之间插入空格

6
有没有一种简单的方法在字符串的字符之间插入空格?我正在使用以下代码,该代码接受一个字符串(例如(UI$.EmployeeHours * UI.DailySalary)/(Month))。由于此信息来自Excel表格,因此我需要为每个列名插入[]。如果用户在每个括号和运算符后面避免添加空格,则会出现问题。有人可以帮忙吗?
      text = e.Expression.Split(Splitter);
      string expressionString = null;
      for (int temp = 0; temp < text.Length; temp++)
                        {
                            string str = null;
                            str = text[temp];
                            if (str.Length != 1 && str != "")
                            {
                                expressionString = expressionString + "[" + text[temp].TrimEnd() + "]";
                            }
                            else
                                expressionString = expressionString + str;

                        }

用户可能会输入类似于 (UI$.SlNo-UI+UI$.Task)-(UI$.Responsible_Person*UI$.StartDate) 的内容,而我期望的输出是 ([UI$.SlNo-UI] + [UI$.Task]) - ([UI$.Responsible_Person] * [UI$.StartDate])。


4
请提供一个输入和期望输出的例子,这样我就能理解您需要做什么。 - IanT8
我无法清楚地理解你的问题,但是为什么你在代码中没有在括号前后添加额外的空格呢?将“ [”替换为“ [”,以此类推。 - Anton Semenov
用户在创建文本框表达式时将定义括号。 - NewBie
4个回答

10

这里有一种简单的方法,在字符串中的每个字符后面插入空格(虽然我知道这不完全是你想要的内容):

var withSpaces = withoutSpaces.Aggregate(string.Empty, (c, i) => c + i + ' ');

这会生成一个与第一个字符串相同,但在每个字符(包括最后一个字符)后面添加空格的字符串。


3

您可以使用正则表达式实现这一点:

using System.Text.RegularExpressions;
class Program {
    static void Main() {
        string expression = "(UI$.SlNo-UI+UI$.Task)-(UI$.Responsible_Person*UI$.StartDate) ";
        string replaced = Regex.Replace(expression, @"([\w\$\.]+)", " [ $1 ] ");
    }
}

如果您不熟悉正则表达式,这可能看起来相当晦涩,但它们是一种强大的工具,值得学习。如果需要,您可以查看正则表达式的工作原理,并使用类似Expresso的工具测试您的正则表达式。
希望这有所帮助...

1
这里有一个不使用正则表达式的算法。
//Applies dobule spacing between characters
public static string DoubleSpace(string s)
{
    if (string.IsNullOrEmpty(s))
    {
        return string.Empty;
    }

    char[] a = s.ToCharArray();
    char[] b = new char[ (a.Length * 2) - 1];

    int bIndex = 0;
    for(int i = 0; i < a.Length; i++)
    {
        b[bIndex++] = a[i];

        //Insert a white space after the char
        if(i < (a.Length - 1))
        {
            b[bIndex++] = ' ';
        }
    }

    return new string(b);
}

0

你可以使用正则表达式来实现这个功能,搜索特定的模式并在需要的地方添加括号。你也可以简单地将每个括号替换为相同的括号,但两端加上空格。

我还建议你使用StringBuilder而不是追加到现有字符串中(这会为每个操作创建一个新字符串,StringBuilder在进行此类操作时具有较小的内存占用)。


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