也许我没有合适的关键字,但我似乎无法找到如何做到这一点。
假设我有这两个字符串:
firstString = "I am a string";
secondString = "I am a long";
是否有一种方法可以让我将字符串1的一部分移动到字符串2?
移动,而不是复制。
最终结果将是:
firstString = "I am a"
secondString = "I am a long string"
我有一个包含很多字符的字符串。我想将此字符串发送到SQLServer,但接收它的函数不能容纳超过8000个字符。所以我需要每8000个字符发送一个请求。
答案 0 :(得分:4)
字符串是不可变的,所以你真正做的是将firstString
的一部分重新分配给自己,并将另一部分连接到secondString
的末尾。没有内置的方法来实现这一点,但代码非常简单
secondString += firstString.Substring(6);
firstString = firstString.Substring(0,6);
答案 1 :(得分:3)
是否有一种方法可以让我将字符串1的一部分移动到字符串2? 移动,而不是复制。
由于.NET字符串是不可变的,因此它们不能支持具有“移动”语义的方法。字符串的每次修改都需要创建一个新对象,需要复制。
编辑(响应问题的编辑)看起来您的问题与将字符串拆分为8K字符有关,而不一定是移动字符串的部分。在这种情况下,您可以使用此简单代码将部分字符串传递给SQL:
string string1 = GetReallyLongString();
const int sqlMax = 8000;
while (true) {
if (string1.Length > sqlMax) {
SendToSql(string1.Substring(0, sqlMax));
string1 = string1.Substring(sqlMax);
} else {
SendToSql(string1);
break;
}
}
这是一个快速demo on ideone。
答案 2 :(得分:2)
由于字符串是不可变的,因此无法更改它们。您可以使用原始字符串中的部分创建新字符串:
firstString = "I am a string";
secondString = "I am a long";
// concatenate second string with part from first string
secondSring = secondString + firstString.Substring(6);
// create a new string from part of the first string
firstString = firstString.Substring(0, 6);
答案 3 :(得分:0)
受dasblinkenlight解决方案的启发,但使用yield
制作静态方法,并使用尽可能少的子字符串来减少内存使用量。
using System;
using System.Collections.Generic;
public class Test
{
public static void Main()
{
string string1 = "quick brown fox jumps over the lazy dog";
foreach (var strSection in string1.SplitInto(8))
Console.WriteLine("'{0}'", strSection);
}
}
public static class MyExtensions
{
public static IEnumerable<string> SplitInto(this string value, int size)
{
for (int i = 0; i < value.Length; i += size)
{
if (i + size <= value.Length)
yield return value.Substring(i, size);
else
yield return value.Substring(i);
}
}
}
在Ideone看到它。
答案 4 :(得分:0)
许多方法可以做到这一点:
var partofstring = firstString.Substring(10, 14);
firstString = firstString.Replace(partofstring, "");
secondString += partofstring;