如果分隔符为一个或多个空格,如何分割字符串?

时间:2018-10-04 19:01:52

标签: c# string loops if-statement

我试图让它在换行符中输入每个单词,即使单词之间有更多空格,但是我无法弄清楚这是怎么回事。

string phrase = Console.ReadLine();
string currentWord = ""; 

for (int i = 0; i < phrase.Length; i++)
{
if (phrase[i] == ' ') 
    Console.WriteLine(currentWord);
currentWord = "";
while (phrase[i] == ' ') 
    i++; 
if (phrase[i] != ' ') 
    currentWord += phrase[i];
}
Console.WriteLine(currentWord);

我只是从每个单词中得到最后一个字母。有什么帮助吗?

如果说,我想打印出短语的第n个单词(n来自输入),我该怎么做?

4 个答案:

答案 0 :(得分:2)

由于您没有在if语句中使用花括号,因此该代码将在每次迭代中执行:

currentWord = "";

因此,您重置了currentWord的值。

您可以将Split方法与StringSplitOptions.RemoveEmptyEntries一起使用,而无需重新发明轮子:

var words = phrase.Split(new [] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

答案 1 :(得分:1)

这就是当您在ifwhile正文中不使用花括号时发生的事情……

用大括号将它们都写上,并在当前代码中找出差异。

答案 2 :(得分:0)

我可能会这样做。.

首先添加此引用:

using System.Text.RegularExpressions;

然后,您可以使用简单的正则表达式将字符串拆分为单词,并使用foreach循环显示单词:

var phrase = Console.ReadLine();
var words = Regex.Split(phrase, @"\s+");

foreach(var word in words)
    Console.WriteLine(word)

与您所拥有的代码相比,这也更简洁,使它的阅读,理解和维护变得更加容易。

答案 3 :(得分:0)

您可以使用Replace方法替换char

关注代码:

Console.ReadLine().Replace(" ","");