C# 用空格数替换字符串中的每个空格

C# 用空格数替换字符串中的每个空格,c#,regex,C#,Regex,我有以下挑战。我需要用一个数字来替换字符串中的每个空格,该数字指示有多少空格。 例如:“你好,世界!”;应修改为“Hello1World2!”; 如何在c#中实现这一点。请帮助//您的基本字符串值 //your base string value string baseString = "Hello World !"; for (int i = 0; i < baseString.Length; i++) {

我有以下挑战。我需要用一个数字来替换字符串中的每个空格,该数字指示有多少空格。 例如:“你好,世界!”;应修改为“Hello1World2!”; 如何在c#中实现这一点。请帮助

//您的基本字符串值
        //your base string value
        string baseString = "Hello World !";

        for (int i = 0; i < baseString.Length; i++)
        {
            //check if have empty sumbol by position in string
            if (baseString[i] == ' ')
            {
                //replace symbol logic
                System.Text.StringBuilder sb = new System.Text.StringBuilder(baseString);
                //here you can add logic for random number
                sb[i] = '1';
                baseString = sb.ToString();
            }
        }
string baseString=“你好,世界!”; for(int i=0;i
是否是空格数(''=1,'=3(应为一行中的3个空格)?如果第一个空格为1,第二个空格为2,以此类推

如果是每个空间的“索引”编号,请尝试以下操作:

private void SpaceNumber()
{
    StringBuilder sb = new StringBuilder();
    int sc = 1;
    string input = "bla absldf el kdslf ael dls ale xyz";

    foreach (string x in input.Split(' '))
    {
        sb.Append(x);
        sb.Append(sc);
        sc++;
    }

    sb.Remove(sb.Length - 1, 1);

    string output = sb.ToString();
}

这应该可以帮助你。 我在工作中没有可用的DEV工具,所以将其视为伪代码:

string testString = "Hello World !";
int spaceCounter = 0;
for (int i = 0; i<testString.length; i++)
{
    if (testString.charAt(i) == " ")
    {
        spaceCounter++;
        testString.CharAt(i) = spaceCounter.toString();
    }
}
string testString=“你好,世界!”;
int spaceCounter=0;
对于(inti=0;i很好的答案

现在轮到我了:

        string theWords = "Hello World of C Sharp!";
        int i = 1;

        int pos = theWords.IndexOf(' ');
        while (pos >= 0)
        {
            theWords = theWords.Substring(0, pos) + i.ToString() + theWords.Substring(pos + 1);
            pos = theWords.IndexOf(' ');
            i++;
        }

我希望这对你有用:

string testString = "Hello World  !   ";
StringBuilder resultBuilder = new StringBuilder();
int charCount = 0;

foreach(char character in testString)
{
    if(Char.IsWhiteSpace(character))
    {
        charCount++;
    }
    else
    {
        if(charCount > 0)
        {
            resultBuilder.Append(charCount);
            charCount = 0;
        }
        resultBuilder.Append(character);
    }
}

if (charCount > 0)
{
    resultBuilder.Append(charCount);
    charCount = 0;
}

testString = resultBuilder.ToString();

我终于得到了一个正则表达式的答案: 使用正则表达式的
MatchEvaluator
-类:

using System.Text.RegularExpressions;

static void Main(string[] args)
{

    string input = "bla absl ael   dls ale ";

    var result2 = Regex.Replace(input, "\s+", new MatchEvaluator(ReplaceByCount));
    Console.WriteLine(result2);
    //returns bla1absl1ael3dls1ale1
}

private static string ReplaceByCount(Match m)
{
    return m.Value.Length.ToString();
}

编辑:将“+”替换为“\s+”,以匹配@Marco Forbergs comment之后的所有空白字符

string str = "Hello World !";

string result = str.Split()
                .Zip(Enumerable.Range(1, str.Split().Length), (x, y) => x + y)
                .Aggregate((x, y) => x + y).Remove(str.Length);

我找到了解决方案。这似乎有点困难,但只要坚持不懈就可以了。我建议您使用C#的StringBuilder类(因此不要错过添加程序集匹配)

这是您可以得到结果的脚本:

string entry = "Hello World !";

StringBuilder stringToBuild = new StringBuilder(entry);
int iForNewValue = 1;
for (int i = 0; i < entry.Length; i++)
{
    Console.WriteLine("ITEM [{0}] at {1}", entry[i], i);
    if (entry[i].ToString() == " ")
    {
        Console.WriteLine("=======> SPACE FOUNDED HERE");
        stringToBuild.Replace(entry[i].ToString(), iForNewValue++.ToString(), i, 1);
    }
}
Console.WriteLine("NEW STRING BUILD ========================> {0}", stringToBuild);
string entry=“你好,世界!”;
StringBuilder stringToBuild=新StringBuilder(条目);
int iForNewValue=1;
for(int i=0;i此处创建空间”);
stringToBuild.Replace(条目[i].ToString(),iForNewValue++.ToString(),i,1);
}
}
Console.WriteLine(“新字符串生成====================>{0}”,stringToBuild);

您最初的想法是什么?您尝试过什么吗?您似乎在向regex(=>tag)的方向搜索。是什么让你认为这是一个好主意?你想让答案只进入正则表达式解决方案吗?请帮助我们帮助你。如果你能提供一个输入和预期输出的示例,那就太棒了。另外,请清楚你所说的
空白是什么意思
-这仅仅意味着空间吗?标签呢?回车符?等等我向RegEx提出了这个问题,但你的问题和你的头衔都没有说明RegEx是否真的是一项要求。是吗?@PaulKertscher ith think SKN相信这项任务可以用常规的方法解决expressions@MarcoForberg这就是Paul提问的原因-因此我们不需要“认为他有”,但我们可以“知道他有”;)使用“\s+”不是更好吗还要查找其他空白字符吗?感谢您的慷慨帮助。我最初的尝试是使用regex'\s+'查找所有空格(仅空格)。但是我不知道如何用空格数替换它。谢谢@Chriz。今天我了解了MatchEvaluator。