在C#中分割和连接字符串

98

可能重复:
先将字符串拆分,然后连接子字符串的第一个元素

我正在尝试将一个字符串拆分成数组,取出第一个元素(使用它),然后将数组的其余部分连接成一个单独的字符串。

示例:

theString = "Some Very Large String Here"

将变成:

theArray = [ "Some", "Very", "Large", "String", "Here" ]

我希望能够将数组的第一个元素设置为变量并在以后使用。

然后我想将其余的数组连接成一个新的字符串。

因此,它将变成:

firstElem = "Some";
restOfArray = "Very Large String Here"

我知道我可以使用theArray[0]来获取第一个元素,但是如何将数组的其余部分连接成一个新字符串呢?


4
为什么不直接使用子字符串复制第一个单词(使用空格作为索引),然后从原始字符串中简单地删除第一个单词呢? - Greg
3个回答

208
你可以使用string.Splitstring.Join
string theString = "Some Very Large String Here";
var array = theString.Split(' ');
string firstElem = array.First();
string restOfArray = string.Join(" ", array.Skip(1));

如果您知道您始终只想拆分第一个元素,可以使用:

var array = theString.Split(' ', 2);
这样做可以避免使用join操作:
string restOfArray = array[1];

5
Split的双参数形式中,第一个参数应该是一个字符数组,而不是一个单独的字符。请参见MSDN上的String.Split Method (Char[], Int32)和用户166390在此答案中提供的示例。 - DavidRR
@DavidRR 正确。但更好的方法是使用一参数形式来在所有空白字符上分割。在 OP 的示例中,看起来像单个空格字符的可能也是两个空格或一个 TAB。 - Roland

26
好的,这是我的“答案”。它使用了 String.Split 可以指定应该分割多少项(这是我在其他答案中觉得缺失的)的事实。
string theString = "Some Very Large String Here";
var array = theString.Split(new [] { ' ' }, 2); // return at most 2 parts
// note: be sure to check it's not an empty array
string firstElem = array[0];
// note: be sure to check length first
string restOfArray = array[1];

这与Substring方法非常相似,只是使用了不同的方式。


1
正如我自己即将建议的那样。分割的简单性,但无需再次合并的开销。 - Guffa

7

你可以分割和连接字符串,但为什么不使用子字符串?这样你只需要一次分割而不是将字符串拆分成5个部分再重新连接。最终结果相同,但子字符串可能会更快。

string lcStart = "Some Very Large String Here";
int lnSpace = lcStart.IndexOf(' ');

if (lnSpace > -1)
{
    string lcFirst = lcStart.Substring(0, lnSpace);
    string lcRest = lcStart.Substring(lnSpace + 1);
}

将拆分限制为2可以避免“N个部分”的问题 - 在这种情况下,两者都应该在一些小的C中表现得很好,时间复杂度为O(1) - user166390
根据我的经验,Substring 经常导致太多的±1错误。我更喜欢让计算交给机器,并以重要字符为关键点。 - Ryan Gates
1
我进行了5000次迭代测试,结果发现子字符串快了1/1000毫秒。这归结于编码实践的问题。代码长度也没有太大差异(通过边界检查确保拆分返回两个条目)。重要的是选择正确的工具来完成工作,而我想表达的观点是将其分成五个部分,然后重新连接其中四个部分不是正确的工具。 - Sheridan Bulger
4
如果你想要真正找到性能差异,不要增加迭代次数,而是增加字符串的大小。如果你对一篇博士论文执行这两个操作(即使只是几次),你会看到更加明显的差异。如果你永远不会在大数据集上使用它,那么性能显然就不相关了。 - Servy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接