Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将字符串的一部分移动到另一个字符串_C#_.net_String - Fatal编程技术网

C# 将字符串的一部分移动到另一个字符串

C# 将字符串的一部分移动到另一个字符串,c#,.net,string,C#,.net,String,也许我没有正确的关键词,但我似乎找不到如何做到这一点 假设我有两个字符串: firstString = "I am a string"; secondString = "I am a long"; 是否有一种方法允许我将字符串1的一部分移动到字符串2 移动,而不是复制。 最终结果将是: firstString = "I am a" secondString = "I am a long string" 问题 我有一个包含大量字符的字符串。我想将此字符串发送到SQLServer,但接收该

也许我没有正确的关键词,但我似乎找不到如何做到这一点

假设我有两个字符串:

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个字符发送一个请求

  • 检查String1是否超过8000个字符
  • 如果是,将前8000个字符移动到String2中
  • 将String2插入SQL
  • 重复
  • 如果长度小于8000个字符,则将字符串1发送到SQL
是否有一种方法允许我将字符串1的一部分移动到字符串2移动,而不是复制。

由于.NET字符串是不可变的,因此它们不能支持具有“move”语义的方法。对字符串的每一次修改都需要创建一个新对象,这需要复制

EDIT(回答问题的编辑)您的问题似乎与在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;
    }
}

这里有一个快速的。

灵感来自dasblinkenlight的解决方案,但使用
生成一个静态方法,并使用尽可能少的子字符串来减少内存使用

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);
        }
    }
}
使用系统;
使用System.Collections.Generic;
公开课考试
{
公共静态void Main()
{
string string1=“快速棕色狐狸跳过懒狗”;
foreach(string1中的var strSection.拆分为(8))
WriteLine(“{0}”,strSection);
}
}
公共静态类MyExtensions
{
公共静态IEnumerable SplitInto(此字符串值,int size)
{
for(int i=0;i
var partofstring = firstString.Substring(10, 14);
firstString = firstString.Replace(partofstring, "");

secondString += partofstring;

字符串是不可变的,因此您真正要做的是将
firstString
的一部分重新分配给它自己,并将另一部分连接到
secondString
的末尾。没有内置的方法来实现这一点,但代码非常简单

secondString += firstString.Substring(6);
firstString = firstString.Substring(0,6);

由于字符串是不可变的,您无法更改它们。您可以使用原始字符串的部分创建新字符串:

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);

很好,我想这正是我需要的:)!@PhaDaPhunk:你不能将字符串的一部分移动到另一个字符串,因为字符串是不可变的。你可以将它放在
StringBuilder
中,它实际上允许修改内容,但这并不比创建新字符串更有效。好的,我明白了。现在我可以模拟移动。使用子字符串。对吗?谢谢:)@PhaDaPhunk:如果你想把一个字符串分成8000个字符的块,你甚至不需要“移动”来自原始字符串的块,您可以一次只复制一个块,而保留原始字符串不变。这将是获取块的最有效的方法。我几乎想否决这一点,因为它最初提出的问题与您的实际问题完全不同。但是,您已清除了它,所以现在可以了。@TimS。您也一样现在应该知道了,我们在这里尽量保持它的一般性。没有人关心我的具体问题,而我真正想知道的是你是否可以将一部分从一个字符串移动到另一个字符串。知道这一点非常有帮助。知道如何解决我的特定sql问题根本不是。但将一部分字符串从一个字符串移动到另一个字符串是非常困难的将一个字符串拆分成若干块是一个完全不同的问题。@TimS.如果我学会如何将一个字符串的一部分移动到另一个,我知道如何做其余的事情。此外,我会使用
string.Split()
,但在我的情况下它不起作用。知道如何“移动”(我使用引号是因为,由于是不可变的,您实际上是在用新值创建新副本,但除非您的字符串足够大,足以造成大量内存消耗,这只是语义)从一个字符串到另一个字符串的子字符串是解决您的问题的一种方法。我认为这是一种令人困惑的方法,因此很糟糕。据我所知,您是,将一个子字符串从字符串的第一部分“移动”到空字符串中,该空字符串将成为第二个字符串。