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

时间:2013-05-16 13:01:39

标签: 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,但接收它的函数不能容纳超过8000个字符。所以我需要每8000个字符发送一个请求。

  • 检查String1是否超过8000个字符
  • 如果是,请将第一个8000字符和 MOVE 带入String2
  • 将String2插入SQL
  • 重复
  • 如果它的长度小于8000个字符,则将字符串1发送到SQL

5 个答案:

答案 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;