2016-06-19 111 views
0

我有一些字符串处理问题。我有一些字符串我输入:C处理线处理#

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

我需要Concat的这两个字符串,例如:

Output = "Marrei E. (Spa)"; 

我尝试这样做:

var d = firstString.Split(' '); 
var dd = firstString[0].ToString(); 
var Output = d[1] + " " + dd + "." +" " + "(" + "???" + ")"; 

我怎么能砍西班牙第三个元素?

也就是说,即使我的方式工作,你知道一个更干净的解决方案吗?

+0

“即使我的方式工作,” - 是什么呢?当你的问题要求“Marrei E.(Spa)”时,你得到了“Marrei E.(???)”,你不是吗? – hvd

+0

我已经在Visual Studio中运行我的代码,它可以工作。尝试运行它 – Yoseph

回答

0

你的问题是“你知道更多的清洁解决方案”。 嗯...我的回答是: 我想你认为每个国家的所有3letterCode都是由国家的前3个字母(如SPAin => SPA)等创建的。该方法的错误,看看这里: http://www.worldatlas.com/aatlas/ctycodes.htm

返回代码:

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); 
    } 
} 

有你应该添加一些条件,但现在并不重要。

使用代码:

Person person = new Person() 
{ 
    Name = "Endi", 
    Surname = "Marrei", 
    Country = CountriesFactory.GetCountryByName("Spain") 
} 

Console.WriteLine(person.ToString()); 

你的榜样:

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) 
} 

我认为我的做法将在未来更加有用。

-1
var firstString = "Endi Marrei"; 
var SecondString = "Spain"; 

var d = firstString.Split(' ');<br/> 
var Output = d[1] + " " + d[0][0] + "." + " " + "(" + SecondString.Substring(0, 3) + ")"; 

d [0] [0]与firstString [0] .ToString();相同。

+0

如果使用代码块格式(即每行起始处有四个空格),它将更具可读性。如果你用一个简短的解释来延伸你的答案,这也会有所帮助。 – Jeroen

+0

谢谢Jeroen – Yoseph

+0

我已经在Visual Studio中运行我的代码,它的工作原理。尝试运行它 – Yoseph

0

even though your code is working ..所以我想,你正在寻找一个更干净的方式来做到这一点(而不是一个班轮)。简单的建议是不要使用+运算符来连接字符串和空格。尝试使用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); 
0

你可以使用正则表达式,尽管这是否是一种更清洁的方法值得商榷。

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) 

Demo.