【问题标题】:How to bring back removed spaces如何恢复已删除的空间
【发布时间】:2017-07-13 15:00:43
【问题描述】:

我有一个字符串,在单词之间有多个空格,我想删除这些空格,然后将它们带回来..问题是在删除它们后带回空格我试图编写我的想法,但它运行时没有任何输出,有时它给了我一个例外“索引超出数组边界”..任何帮助

string pt = "My name is Code"
int ptLenght = pt.Length;
char[] buffer1 = pt.ToCharArray();
spaceHolder = new int[pt.Length];
for (int m = 0; m < pt.Length; m++)
{
    if (buffer1[m] == ' ')
    {
        hold = m;
        spaceHolder[m] = hold;
    }
}
char[] buffer = pt.Replace(" ", string.Empty).ToCharArray(); 
int stringRemovedSpaces = pt.Length;
char[] buffer = pt.ToCharArray(); // source
char[] buffer2 = new char[ptLenght]; // destination
for (int i = 0; i < pt.Length; i++)
{
    buffer2[i] = buffer[i];
}
for (int i = 0; i < buffer2.Length; i++)
{
    if (i == spaceHolder[i])
    {
        for (int m = stringRemovedSpaces; m <= i; m--)
        {
            buffer2[m-1] = buffer2[m];
        }
        buffer2[i] = ' ';
    }
}
return new string(buffer2);

【问题讨论】:

  • 我不清楚你到底想要什么。为什么不创建一个新变量来保存“无空格”字符串,然后在需要空格时引用原始变量?
  • 您的代码是否删除了 all 个空格?使用正则表达式用一个空格替换多个空格更容易、更快捷:Regex.Replace("A B C",@"\s+"," ") 将返回A B C
  • 您是否使用调试器单步执行了代码(尽管您确实应该按照@maccettura 所说的去做,但您仍然应该能够诊断出您的代码)

标签: c# string winforms char spaces


【解决方案1】:

我怀疑您想用一个空格替换多个空格。最快和最简单的方法是使用一个简单的正则表达式,用一个空格替换多个空格,例如:

var newString = Regex.Replace("A     B      C",@"\s+"," ")

var newString = Regex.Replace("A     B      C",@"[ ]+"," ")

这比重复字符串替换等其他方法最快的原因是正则表达式不会生成临时字符串。在内部,它会生成匹配项目的索引列表。仅当代码要求字符串值(如匹配或替换)时才会生成字符串。

正则表达式对象也是线程安全的。您可以创建一次,将其存储在静态字段中并重复使用:

static Regex _spacer = new Regex(@"\s+");


public void MyMethod(string someInput)
{
    ...
    var newString=_spacer.Replace(someInput, " ");
    ...
}

【讨论】:

    【解决方案2】:

    删除字符串中的所有空格实际上就像在字符串上调用 Replace 函数一样简单。请注意,当您对字符串调用 Replace 时,它​​不会修改原始字符串,它会创建并返回一个新字符串。我之所以提出这个问题,是因为您将两个不同的整数变量设置为pt.Length,而pt 的字符串在任何时候都没有实际修改过。另外,我想您正在从嵌套的 for 循环中获取“索引超出数组范围”。您以m 将永远递减的方式设置循环。但是,一旦 m 等于 0,您将尝试从 buffer2 访问 -1 的索引,这是不行的。如果您想在保留字符串的原始副本的同时删除空格,您可以将代码简化为:

    string pt = "My name is Code";
    string newpt = pt.Replace(" ", string.empty);
    

    pt 是一个带空格的字符串,newpt 是一个去掉空格的新字符串。但是,如果您想用单个空格替换多个连续空格,我建议您遵循 Panagiotis Kanavos 给出的答案。

    【讨论】:

      【解决方案3】:

      我听从了@maccettura 的建议,我这样做了,而且效果如我所愿:)

       string orignalString = "";
       orignalString = pt;
       char[] buffer = pt.ToCharArray();
       orignalString = new string(buffer);
       return orignalString.Replace(" ", string.Empty);
       // Here I got the string without spaces , now I have the same string with and without spaces
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-23
        • 2021-09-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多