【问题标题】:Get array of words from a string [duplicate]从字符串中获取单词数组[重复]
【发布时间】:2020-07-15 14:05:15
【问题描述】:

我正在处理一个要求,我需要将字符串中的所有单词放入数组中。 “单词”被描述为任何非空格字符序列。 字符串中可以有任意数量的空白字符。

输入示例:

"  Hello World!!  "
"Hello World!!"
"  Hello       World!!    "

在上述所有情况下,输出应该是 ["Hello","World!!"]

现在我尝试自己解决这个例子并有以下代码:

public string[] GetWords(string s)
   {
        s=s.Trim();
        while(s.Contains("  "))
        {
            s = s.Replace("  ", " ");
        }

        string[] input=s.Split(' ');
        return input;
   }

我使用上面的代码得到了正确的结果。我担心有什么方法可以使代码变得干净或比现在更优化。

【问题讨论】:

  • “干净”的定义可能是基于意见的。对于“优化”,您还需要指定哪种方式:快?内存占用小?小代码?
  • string.Split(' ', StringSplitOptions.RemoveEmptyEntries) 是个好主意
  • @dymanoid 我正在寻找的结果比我执行的步骤少。
  • @Homungus 谢谢,你的解决方案对我有用
  • 同样没有 RegEx,适应:stackoverflow.com/questions/58734248/…

标签: c# string


【解决方案1】:

使用以下代码sn-p:

var str = "  Hello World!!  ";
string[] array = str.Split(new Char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
 

结果将是 ["Hello","World!!"]

注意:new Char[] { ' ' } 如果需要处理多个字符。否则,您可以使用以下

string[] array = str.Split(' ', StringSplitOptions.RemoveEmptyEntries);

【讨论】:

    【解决方案2】:

    我会使用正则表达式:

    using System.Text.RegularExpressions;
    
    ...
    
    public string[] GetWords(string s) =>
        Regex.Matches(s, @"[^\s]+")
            .Cast<Match>()
            .Select(x => x.Value)
            .ToArray();
    

    【讨论】:

    • 我会使用Regex.Split()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-27
    • 2018-04-10
    • 2019-05-21
    相关资源
    最近更新 更多