我想分割字符串,并且应该使用C#获得特定的文本

时间:2019-07-24 16:17:52

标签: c# string split

我想使用拆分功能拆分字符串并获取特定的文本(“ 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

实际:

  

超出数组错误范围的索引

3 个答案:

答案 0 :(得分:1)

如果用空格分隔,则将得到"Kernal""Ltd"作为两个不同的条目。除以'-',不要依赖特定数量的零件。而是寻找结果数组的长度。

string[] parts = "Your Quote - 12345- Kernal Ltd".Split('-');
string name = parts[parts.Length - 1].Trim(); // ==> "Kernal Ltd"

数组索引从零开始,范围从0Length - 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();
}