我有一个长度为1000的字符串。我需要拆分它并将其分配给不同的控件。我没有任何字符分隔符 因为我分配给控件的每个字符串不包含相同的长度。截至目前,我正在使用子字符串,其中我指定长度。但随着时间的长短,它对我来说变得忙碌。
请建议我有没有办法以更简单的方式拆分和分配?
答案 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
属性的相同基类。如果不是这种情况,您可能需要在循环内进行一些类型检查和强制转换。