【问题标题】:Is there a Difference between Splitting on Character to Splitting on Phrase按字符拆分与按短语拆分有区别吗
【发布时间】:2015-09-26 22:21:59
【问题描述】:

这两个函数的输出有什么区别吗?我有一个正在网站上修改的文本编辑器。编辑器当前按字符拆分,但我将其切换为按单词或短语拆分。

按字符分割

string words = "word1*word2*word3*word4";
string[] collectionofWords = words.Split('*');

分词

string words = "word1***word2***word3***word4";
string[] collectionofWords = words.Split(new string[] { "***" }, StringSplitOptions.None);

即使在困难的情况下,这些功能也能完全一样地工作吗?

在我上面的示例中,它们看起来是相同的词,但是如果有空数据 (EG1) 或者如果字符串的开头或结尾有字符 (EG2) 会怎样,这些函数仍然会产生相同的结果吗?

如果传入相同的数据,这两个函数是否会产生不同的结果?

EG1

string words = "word1*word2**word4";
string words = "word1***word2******word4";

EG2

string words = "*word1*word2*word3*word4*";
string words = "***word1***word2***word3***word4***";

【问题讨论】:

  • 你知道NET Framework的源代码在this address吗?
  • 它不是运算符,我只是使用 * 和 *** 将字符串拆分为数组
  • 您应该澄清您的问题,您应该使用不同的标识符。就目前而言,您似乎是在询问在一个星号上拆分是否与在三个星号上拆分相同,但事实并非如此。

标签: c# .net arrays split


【解决方案1】:

如果您害怕不同的结果,您可以在正则表达式匹配上使用另一种方法拆分:

string words = "word1*word2*word3*word4";
string words2 = "word1***word2***word3***word4";

string[] arr = Regex.Split(words, @"\*+");
string[] arr2 = Regex.Split(words2, @"\*+");

if (arr.SequenceEqual(arr2))
    Console.WriteLine("Arrays are equal");

【讨论】:

  • 问题是如果它是可行的,你不想保护一些不可能发生的事情..
【解决方案2】:

与这里的建议相反,从string class 实现来看,这是两种不同的方法,具有不同的依赖关系。

按照设计,预期输出应该与MSDN documentation 相同(抛开性能差异)。

【讨论】:

    【解决方案3】:

    简而言之:没有。使用字符重载进行拆分和使用字符串重载进行拆分之间没有功能上的区别。但是,与需要更多检查相比,使用字符串进行拆分的效率应该稍低。

    据我所知,它们在相同情况下的功能相同,因为它们基本上是相同的代码,只是比较不同。

    【讨论】:

    • 谢谢,这是我想知道的,除了性能之外,返回数组的数据还有实际差异
    • “基本相同的代码”——实际上,从刚才读取的字符串类来看,这是不正确的。这是两种不同的方法,每一种都有不同的依赖关系。
    • 问题是给出的两个例子使用了不同的分隔符,所以有区别。
    • 除了分隔符之外,它的输出是否相同?
    猜你喜欢
    • 2015-07-26
    • 2013-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-20
    相关资源
    最近更新 更多