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中运行了我的代码,它可以正常工作。试着运行它