分割太长的弦

时间:2018-12-17 11:02:28

标签: c# linq

我有一个字符串,如下图所示: enter image description here

我正在使用一个API,该API在json中使用此大字符串,例如 cat ~/.ssh/id_rsa.pub 因此,我想开发它并在2个请求中发送字符串,但是当我尝试使用 cat ~/.ssh/id_dsa.pub 时,我得到了大字符串的一半,但未完成行,如下图所示: enter image description here

我想获取完整行的字符串的一半,以避免请求超时

给出结果的代码:

{"data" : "the large string which in the picture"}

2 个答案:

答案 0 :(得分:3)

要找到要在其中分割字符串的确切索引,您可能想尝试使用\r\n方法在字符串中间寻找最接近的String.IndexOf(string value, int startIndex)。 代码看起来像

var str = "1,2,3,4\r\n5,6,7,8\r\n9,10,11,12";
var half = str.Substring(0, str.IndexOf("\r\n", str.Length / 2));

哪个产生"1,2,3,4\r\n5,6,7,8"

对于某些情况,例如,如果字符串的中间在最后一行之内,或者所使用的行定界符不是\r\n,则可能需要添加一些附加验证。

答案 1 :(得分:1)

鉴于输入字符串的长度可以变化,最好将请求批处理为已知长度,而不是简单地将其拆分成一半。

int REQUEST_SIZE = 1024;
string requestDelimiter = "\r\n";
int requestStart = 0;
int requestEnd = 0;

while(requestStart < dataByte.Length)
{
   // Sending loop
   int batchLength = requestStart+REQUEST_SIZE;
   if (requestStart+batchLength > dataByte.Length)
   {
      // Cover for when the end of the string exceeds batchLength
      // Ensure that the batchLength is adjusted to be within the string length
      batchLength = dataByte.Length - requestStart;
   }
   requestEnd = dataByte.IndexOf(requestDelimiter, batchLength, StringComparison.Ordinal);
   var requestData = dataByte.Substring(requestStart, requestEnd - requestStart);
   // TODO: process requestData

   requestStart = requestEnd;
}

上面的代码将请求分为1024个字符块。

请注意:未经测试的代码-可能有错别字。