2011-01-17 6 views
0

を、出力がUpper:APPLELower:appleですが、私はAppleがApple社になるために必要がある、とブルーベリーは、ブルーベリーになるために。:私の次のコードでは(ブルーベリーアップル、ブルーベリーアップル)

string[] words = {"aPPLE", "BlUeBeRrY", "cHeRry" }; 

var upperLowerWords = from w in words 
         select new { Upper = w.ToUpper(), 
            Lower = w.ToLower() }; 

foreach (var ul in upperLowerWords) 
{ 
    Console.WriteLine("Uppercase: {0}, Lowercase: {1}", ul.Upper, ul.Lower); 
} 
+0

あなたは 'ToTitlecase'を探しています。 – leppie

答えて

0
string[] words = { "aPPLE", "BlUeBeRrY", "cHeRry" }; 
var upperLowerWords = from w in words  
         select new { Original = w, Changed = ChangeCases(w) }; 
foreach (var ul in upperLowerWords) 
{ 
    Console.WriteLine("Original: {0}, Changed: {1}",  
     ul.Original, ul.Changed); 
} 

static string ChangeCases(string input) 
{ 
    string result = string.Empty; 

    foreach (char ch in input) 
    {     
     result += Char.IsUpper(ch) ? ch.ToString().ToLower() : ch.ToString().ToUpper(); 
    } 
    return result; 
} 
+0

答えを書式設定して、コードから行番号を削除してみてください。 –

+0

ありがとう私は行を編集しました – Rajesh

+0

私は静的関数を変更する(私は 'InvertCase'と呼ぶ)が好きですが、繰り返し結合ではなく' new string(char []) 'の@ Gidonのアプローチを使用することが好ましい。 – Benjol

3

いくつかのより多くのLINQの魔法の使用:いくつかの拡張メソッドで投げる程度

string[] words = { "aPPLE", "BlUeBeRrY", "cHeRry" }; 

var upperLowerWords = from w in words 
         select new 
         { 
          Upper = w.ToUpper(), 
          Lower = w.ToLower(), 
          Original = w, 
          Changed = new string(w.Select(s=> char.IsLower(s) ? char.ToUpper(s) : char.ToLower(s)).ToArray()) 
         }; 

foreach (var ul in upperLowerWords) 
{ 
    Console.WriteLine("Original: {0}, Uppercase: {1}, Lowercase: {2}, Changed: {3}", ul.Original, ul.Upper, ul.Lower, ul.Changed); 
} 
+0

文字がすでに小文字である場合、内側の 'Select'の条件式に' char.ToLower'の必要はありません。 (ちょうど大文字と小文字がラテンアルファベットベースの言語のサブセットに実際に適用されるという仮定はすべきではありません:ゲール語を含むケースはありません。 – Richard

+0

文字が小文字の場合は大文字にします。そうでない場合(大文字の場合)、小文字にします。ユーザーが非ゲール語/アラビア語/ヘブライ語/中国語などのウェブサイトでそれを使用していると仮定しましょう。 – Gidon

1

方法:

public static class StringExtensions 
{ 
    public static string InvertCases(this string value) 
    { 
     if (string.IsNullOrWhiteSpace(value)) return value; 

     var chars = value.ToCharArray(); 
     for (int i = 0; i < chars.Length; i++) 
      chars[i] = char.IsLower(chars[i]) ? char.ToUpper(chars[i]) : char.ToLower(chars[i]); 

     return new string(chars); 
    } 
} 

をし、あなたの使用は

static void Main(string[] args) 
{ 
    string[] words = { "aPPLE", "BlUeBeRrY", "cHeRry" }; 

    foreach (var ul in words) 
    { 
     Console.WriteLine("Original: {0}, Inverted: {1}", ul, ul.InvertCases()); 
    } 

    Console.ReadLine(); 
} 
だろうの

多くの方法は、あなたがXORをすることができ、ASCII文字のみの場合

// sTAcKoVERfLOw 
    Console.Write(result); 
+0

提案をありがとう! – AngieM

0

...ローマに通ず第6ビット:

string[] words = { "aPPLE", "BlUeBeRrY", "cHeRry" }; 

var result = words.Select(s => string.Concat(s.Select(c => (char)(c^' ')))); 

Debug.Print(string.Join(", ", result)); // "Apple, bLuEbErRy, ChErRY" 
0

...私はchar.IsXXXchar.ToXXX方法

string source = "StaCkOverFloW"; 

    string result = string.Concat(source.Select(c => char.IsLower(c) 
    ? char.ToUpper(c) : char.IsUpper(c) 
    ? char.ToLower(c) : c)); 

でLINQのを使用することをお勧め