如何使用 IndexOf 删除空格?

How to remove spaces using IndexOf?

我创建了以下内容来计算字数。现在我需要使用 IndexOf 删除所有空格。我卡住了。有人可以帮忙吗?它必须是简单的东西,但我无法弄清楚。

string text = "Hello. What time is it?";
int position = 0;
int noSpaces = 0;
for (int i = 0; i < text.Length; i++)
{
   position = text.IndexOf(' ', position + 1);
   if (position != -1)
   { noSpaces++; }
   if (position == -1) break;
}
Console.WriteLine(noSpaces + 1);

如果你的需求是统计字数,试试这个不行吗?

string text = "Hello. What time is it?";
var arr = text.Split(' ');
var count = arr.Length;

.Net Fiddle

如果您只想删除文本中的空格,使其看起来像:Hello.Whattimeisit? 那么您需要做的就是使用 String.Replace:

string text = "Hello. What time is it?";

string textWithNoSpaces = text.Replace(" ", "");

Console.WriteLine(textWithNoSpaces); // will print "Hello.Whattimeisit?"

如果您希望将文本拆分成单独的词,那么您需要使用 String.Split:

string text = "Hello. What time is it?";

string[] words = text.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); // "RemoveEmptyEntries" will remove any entries which are empty: ""

// words[0] > Hello.

// words[1] > What

// etc.

然后,如果您需要 Hello.Whattimeisit?:

形式的文本,您可以使用 String.Concat 计算文本中有多少个单词,然后将它们组合起来
int numberOfWords = words.Length;

string textWithNoSpaces = string.Concat(words);

更新:这是计算字数并使用 String.IndexOf & String.Substring:

删除空格的方法

这是一个非常草率的例子,但它完成了工作

string text = "Hello. What time is it?";

string newText = string.Empty;

int prevIndex = 0;

int index1 = 0;

int index2 = 0;

int numberOfWords = 0;

while (true)
{
    index1 = text.IndexOf(' ', prevIndex);

    if (index1 == -1)
    {
        if (prevIndex < text.Length)
        {
            newText += text.Substring(prevIndex, (text.Length - prevIndex));

            numberOfWords += 1;
        }
        break;
    }
    index2 = text.IndexOf(' ', (index1 + 1));

    if ((index2 == -1) || (index2 > (index1 + 1)))
    {
        newText += text.Substring(prevIndex, (index1 - prevIndex));

        numberOfWords += 1;
    }
    prevIndex = (index1 + 1);
}
Console.WriteLine(numberOfWords); // will print 5

Console.WriteLine(newText); // will print "Hello.Whattimeisit?"

Console.ReadLine();

字符串是不可变的,因此您不能仅使用需要多次更改的 IndexOf 来实现它。如果您需要使用该特定方法实现它,我认为 StringBuilder 是唯一的方法。但是,如果这不是一些任务并且您打算在实际应用程序中使用它,我强烈反对,因为它真的很繁重。