C# C语言中的线处理#

C# C语言中的线处理#,c#,html-agility-pack,C#,Html Agility Pack,我在字符串操作方面有一些问题。我的输入中有一些字符串: var firstString = "Endi Marrei"; var SecondString = "Spain"; 我需要连接这两个字符串,例如: Output = "Marrei E. (Spa)"; var firstString = "Endi Marrei"; var SecondString = "Spain"; var person = new Person() { Name = firstString.S

我在字符串操作方面有一些问题。我的输入中有一些字符串:

var firstString = "Endi Marrei";
var SecondString = "Spain";
我需要连接这两个字符串,例如:

Output  =  "Marrei E. (Spa)";
var firstString = "Endi Marrei";
var SecondString = "Spain";
var person = new Person()
{
    Name = firstString.Split(' ')[0].ToString(),
    Surname = firstString.Split(' ')[1].ToString(),
    Country = CountriesFactory.GetCountryByName(SecondString)
}
我试过这个:

var d = firstString.Split(' ');
var dd = firstString[0].ToString();
var Output = d[1] + " " + dd + "." +" " + "(" + "???" + ")";
我怎样才能把西班牙变成第三要素


也就是说,即使我的方法可行,你知道一个更干净的解决方案吗?

var firstString=“Endi Marrei”;
var firstString = "Endi Marrei";
var SecondString = "Spain";

var d = firstString.Split(' ');<br/>
var Output = d[1] + " " + d[0][0] + "." + " " + "(" + SecondString.Substring(0, 3) + ")";
var SecondString=“西班牙”; var d=第一个字符串。拆分(“”)
var输出=d[1]+“”+d[0][0]+“+”“+”(“+SecondString.Substring(0,3)+”);

d[0][0]与第一个字符串[0]相同

即使您的代码正在运行
。所以我猜,您正在寻找一种更干净的方法(而不是一行程序)。简单的建议是不要使用
+
运算符连接字符串和空格。尝试使用
String.Format
获取更干净的代码

var firstString = "Endi Marrei";
var SecondString = "Spain";
var parts = firstString.Split(' ');
var d = String.Format("{0} {1}.", parts[1], parts[0][0].ToString().ToUpper());
var dd = String.Format("({0})", SecondString.Substring(0, 3));
var output = String.Format("{0} {1}", d, dd);
你的问题是“你知道更干净的解决方案吗?”。 好。。。我的答案是: 我假设您假设每个国家的所有3个字母代码都是由该国的前3个字母创建的(如
西班牙=>SPA
)。。。等等方法不对,看这里:

返回代码:

public class CountriesFactory
{
    private static List<Country> _countries = new List<Country>()
    {
        new Country("Spain", "Spa"),
        new Country("Germany", "Ger")
    }

    public static Country GetCountryByName(string countryName)
    {
        return _countries.Where(p => p.CountryName == countryName).FirstOrDefault() ?? Country.NONE;
    }
}

public class Country
{
    public string CountryName { get; private set; }
    public string ThreeLetterCode { get; private set; }

    public const Country NONE = new Country("", "");

    public Country (string countryName, string threeLetterCode)
    {
        this.CountryName = countryName;
        this.ThreeLetterCode = threeLetterCode;
    }
}

public class Person
{
    public string Name { get; set; }
    public string Surname { get; set; }
    public Country Country { get; set; }

    public override string ToString()
    {
        return string.Format("{0} {1}. ({2})", Name, Surname[0].ToString(), Country.ThreeLetterCode);
    }
}
通过你的例子:

Output  =  "Marrei E. (Spa)";
var firstString = "Endi Marrei";
var SecondString = "Spain";
var person = new Person()
{
    Name = firstString.Split(' ')[0].ToString(),
    Surname = firstString.Split(' ')[1].ToString(),
    Country = CountriesFactory.GetCountryByName(SecondString)
}

我认为我的方法将来会更有用。

您可以使用正则表达式,尽管这是否是一种更干净的方法仍有争议

var match = Regex.Match(firstString + " " + secondString, @"(\w)\S*\s+(\w+)\s+(\w{3})");
var output = match.Success
                ? string.Format("{1} {0}. ({2})",
                    match.Groups[1], match.Groups[2], match.Groups[3])
                : string.Empty;
Console.WriteLine(output);

// output: Marrei E. (Spa)

如果使用代码块格式(即每行开头有四个空格),则可读性会更好。如果你用一个简短的解释来扩展你的答案也会有帮助。我已经在VisualStudio中运行了我的代码,它可以正常工作。试着运行它“即使我的方式有效”,是吗?当您的问题询问
“Marrei E.(Spa)”
时,您会得到
“Marrei E.(Spa)”
,不是吗?我已经在Visual Studio中运行了我的代码,它可以正常工作。试着运行它