我正在使用一个API,该API在json中使用此大字符串,例如 cat ~/.ssh/id_rsa.pub
因此,我想开发它并在2个请求中发送字符串,但是当我尝试使用 cat ~/.ssh/id_dsa.pub
时,我得到了大字符串的一半,但未完成行,如下图所示:
我想获取完整行的字符串的一半,以避免请求超时
给出结果的代码:
{"data" : "the large string which in the picture"}
答案 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个字符块。
请注意:未经测试的代码-可能有错别字。