【问题标题】:element of separator and split function分隔符和拆分函数的元素
【发布时间】:2021-03-24 08:13:33
【问题描述】:

我在https://docs.microsoft.com/en-us/dotnet/api/system.string.split?view=net-5.0看到这个

分隔符的每个元素定义一个单独的分隔符。如果 两个分隔符相邻,或者在开头找到一个分隔符 或者这个实例的结尾,返回的对应元素 数组包含 Empty。

    string str = "Hello.. How.. are.. you?";
    string[] words = str.Split(new char[] { '.' });
    foreach (string s in words)
    {
        MessageBox.Show(s);
    }

输出是:你好“”你怎么样?

    string str = "Hello. How. are. you?";
    string[] words = str.Split(new char[] { '.' });
    foreach (string s in words)
    {
        MessageBox.Show(s);
    }

输出是:你好,你好吗?

为什么会这样?

【问题讨论】:

  • 什么意思?为什么不会发生?在.. 中的.. 之间有一个空字符串。
  • 我无法正确理解。另一个例子:str = "42..12..19."output = {"42", "", "12", "", "19", ""}
  • 我不懂你不懂的。你能提供更多关于这个场景让你感到困惑的细节吗?对于每个.,您都会在其任一侧获得一个新字符串。所以一个有 6 个. 的字符串在拆分时会产生一个由 7 个字符串组成的数组。一个有 2 个. 的字符串,在拆分时会产生一个由 3 个字符串组成的数组。
  • 即使"......" 也会产生一个包含 7 个(空)字符串的数组。
  • 这能回答你的问题吗? c# split string and remove empty string

标签: c# string split


【解决方案1】:

你的分割字符是.:

string[] words = str.Split(new char[] { '.' });

(参数是一个数组,因为您可以提供 多个不同的字符来分割 - 它确实 意味着它在“点数组”上分割,如果那样的话是你的假设)

因此 .NET 在 每个 点字符处进行相应的拆分:

Hello.. How.. are.. you?
     ^^    ^^    ^^

第一部分是Hello,由第一个点终止。 第二部分是一个长度为 0 的字符串,因为它立即被第二个点终止。

【讨论】:

  • 谢谢。你能告诉我这个例子为什么它为两个端点显示两次空白空间吗? string str = "Hello.. How.. are.. you?..";
  • 你的意思是How之前的空格字符会发生什么?它们被包含在内,因此在处理 Hello.. 部分后,它将显示 " How" 作为第三部分。如果你想删除空格字符,你可以在每个部分使用.Trim(),即MessageBox.Show(s.Trim());(我不太确定这是不是你的意思)
  • 谢谢。为什么我们在" you?" 之后看到""""
  • @user2111639 你明白为什么“Hello.. How”会产生["Hello", "", " How"]而不是["Hello", " How"]吗?
  • 当我们使用StringSplitOptions.RemoveEmptyEntries时,这些空格会被删除。我的问题是为什么当我们在字符串的末尾或开头添加一个点时会显示更多的空间 (string str = ".Hello.. How.. are.. you?.")。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-24
  • 2022-01-19
  • 2019-10-22
相关资源
最近更新 更多