2016-06-19 7 views
0

文字列の操作に問題があります。私は私の入力中にいくつかの文字列を持っている:C#の行処理

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

私は例えば、これら2つの文字列をCONCATする必要があります。

Output = "Marrei E. (Spa)"; 

私はこの試みた:私がスペインをカットすることができますどのように

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

を3番目の要素?

つまり、自分のやり方がうまくいっていても、もっとクリーンな解決策を知っていますか?

+0

"私のやり方が働いているにもかかわらず、" - それはありますか?あなたの質問に「Marrei E.(Spa)」と尋ねると、あなたは「Marrei E.(???)」を得るでしょうか? – hvd

+0

私はVisual Studioでコードを実行しています。それを実行してみてください – Yoseph

答えて

0

ためString.Formatを使用してみてください。 まあ...私の答えは: 各国のすべての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

コードブロックの書式(各行の先頭に4つのスペース)を使用すると、読みやすくなります。また、あなたが短い説明であなたの答えを広げると助けになるでしょう。 – Jeroen

+0

ありがとうJeroen – Yoseph

+0

私はVisual studioで自分のコードを実行しています。実行してみてください – Yoseph

0

even though your code is working ..だから私は、あなたがそれを(そして1つのライナーではなく)行うクリーナーの方法を探していると思います。単純な提案は、文字列とスペースを連結するのに+演算子を使用しないことです。あなたの質問は、「あなたはもっときれいな解決策を知っていますか」でクリーンなコード

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.