如何在没有使用C#在asp.net中指定任何分隔符的情况下拆分字符串?

时间:2013-07-15 12:10:24

标签: string c#-4.0

我有一个长度为1000的字符串。我需要拆分它并将其分配给不同的控件。我没有任何字符分隔符 因为我分配给控件的每个字符串不包含相同的长度。截至目前,我正在使用子字符串,其中我指定长度。但随着时间的长短,它对我来说变得忙碌。

请建议我有没有办法以更简单的方式拆分和分配?

2 个答案:

答案 0 :(得分:2)

您可以使用此string constructor

 var input = "Some 1000 character long string ...";
 var inputChars = input.ToCharArray();

 control1.Value = new string(inputChars, 0, 100);   // chars 0-100 of input
 control2.Value = new string(inputChars, 100, 20);  // chars 100-120 of input
 control3.Value = new string(inputChars, 120, 50);  // chars 120-170 of input
 ...

或使用Substring

 var input = "Some 1000 character long string ...";

 control1.Value = input.Substring(0, 100);   // chars 0-100 of input
 control2.Value = input.Substring(100, 20);  // chars 100-120 of input
 control3.Value = input.Substring(120, 50);  // chars 120-170 of input

您也可以这样做

var parts = new [] 
{
     Tuple.Create(0, 100),
     Tuple.Create(100, 20),
     Tuple.Create(120, 50),
}

var inputParts = parts.Select(p => input.Substring(p.Item1, p.Item2))
                      .ToArray();
control1.Value = inputParts[0];
control2.Value = inputParts[1];
control3.Value = inputParts[3];

随着控件数量的增加,这使维护更容易。您可以静态存储此“部件”列表,以便可以在应用程序的其他位置重复使用,而无需复制代码。

如果所有控件都是相同类型,则可以执行以下操作:

 var parts = new [] 
 {
     new { control = control1, offset = 0, length = 100 },
     new { control = control2, offset = 100, length = 20 },
     new { control = control3, offset = 120, length = 50 },
 }

 foreach(var part in parts)
 {
     part.control.Value = new string(inputChars, part.offset, offset.length);
     // or part.control.Value = input.Substring(part.offset, offset.length);
 }

答案 1 :(得分:1)

您无法指定哪个控件获取字符串的哪个部分的信息。获得此信息后(假设它们存储在控件数组controls和int数组length中),您可以循环遍历字符串并执行分段Substring

var controls = { control1, control2, control3, ... };
var lengths = { 100, 20, 5, ... };

int offset = 0;
for (int i = 0; i < controls.length; i++) {
    controls[i].Value = myLongString.Substring(offset, lengths[i]);
    offset += lengths[i];
}

显然,如果myLongString短于所有lengths的总和,或者lengths的数组长度短于controls的数组长度,则会失败。添加一些检查并抛出一个合适的错误留给读者练习。此外,控件必须兼容,因为它们都来自具有共同Value属性的相同基类。如果不是这种情况,您可能需要在循环内进行一些类型检查和强制转换。