我想使用拆分功能拆分字符串并获取特定的文本(“ Kernal Ltd”)。这是我的以下字符串,
Your Quote - 12345- Kernal Ltd
试图用空字符串分割字符串,并尝试通过索引获取字符串
var companyName = this.renewalSummaryPage.QuoteNameField.GetText().Split(
new string[] { " " }, StringSplitOptions.None);
Assert.AreEqual(CommonMessages.CompanyName, companyName[5]+" "+ companyName[6]);
预期获取以下字符串:
Kernal Ltd
实际:
超出数组错误范围的索引
答案 0 :(得分:1)
如果用空格分隔,则将得到"Kernal"
和"Ltd"
作为两个不同的条目。除以'-'
,不要依赖特定数量的零件。而是寻找结果数组的长度。
string[] parts = "Your Quote - 12345- Kernal Ltd".Split('-');
string name = parts[parts.Length - 1].Trim(); // ==> "Kernal Ltd"
数组索引从零开始,范围从0
到Length - 1
。
或与Linq
string[] parts = "Your Quote - 12345- Kernal Ltd".Split('-');
string name = parts.Last().Trim();
请注意,String.Split
总是返回至少一项。如果输入字符串不包含分割字符,则整个字符串以长度为1的数组返回。
答案 1 :(得分:0)
您的指数相差一。字符串中有5个空格,因此将在Split(" ")
之后产生6个字符串。因此,您必须访问companyName[4]
和companyName[5]
。
一个更优雅的解决方案是:
int last = companyName.Count;
string companyNameString = companyName[last - 1] + " " + companyName[last];
但是最好的解决方案是假设格式始终为以下格式:
<字符串>-<号码>-<公司名称>
是:
string companyName = this.renewalSummaryPage.QuoteNameField.GetText().Split("-").LastOrDefault();
答案 2 :(得分:0)
您可能应该提供更多上下文。如果可以重复使用并且格式始终相同,则可以基于'-'
字符进行分割和修整。前提是您的公司名称中没有'-'
。请记住,如果您输入的格式不相同,则会失败。
var companyName = this.renewalSummaryPage.QuoteNameField.GetText().Split('-').LastOrDefault().Trim();
现在,如果公司名称中包含'-'
个字符,则可以执行以下操作。如果存在'-'
个字符,则会使用公司名称重建字符串。
string[] parts = text.Split('-');
if (parts.Length > 2)
{
companyName = string.Join("-", parts.Skip(2)).Trim();
}
else
{
companyName = parts.LastOrDefault().Trim();
}