2016-06-19 65 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.