2010-12-13 5 views
15

文字列を最初の文字以外の小文字に変換するにはどうすればよいですか? これはLINQで完了できますか?C#で最初の文字以外の文字列を小文字にする方法

おかげ

+1

カントあなただけの下ケースにすべてを最初の文字を大文字にしますか? – Lloyd

+0

lloyd、それは下の私の答えを参照してください:) –

答えて

14
String newString = new String(str.Select((ch, index) => (index == 0) ? ch : Char.ToLower(ch)).ToArray()); 
+2

ニース、面白い答えが、私はLINQは、このような低レベルの操作のための適切なツールだとは思わない。 – ProfK

+2

合意。私はオデッドの答えもあきらめました。しかし、これは私がLINQを使って試したかったものです。 – decyclone

28

あなたは文字列のみで一つの単語を持っている場合は、あなたがTextInfo.ToTitleCaseを使用することができます。 Linqを使用する必要はありません。 @Guffaとして

は注意:

これは、タイトルケースに任意の文字列を変換しますので、 "Hello World" のとは、 "HELLO WORLD" は両方ともに "Hello World" の変換されます。

string mostLower = myString.Substring(0, 1) + myString.Substring(1).ToLower(); 
+7

それはOPが求めたことをしません。文字列「これとそれ」を「これとそれ」に変えるのではなく、それを「これとそれ」に変換します。 – Guffa

+3

補足:私は、ToTitleCaseが大文字の大文字の文字列をそのまま残していることに気付きました。 '' Hello World''を '' Hello World''に変換しますが、 '' HELLO WORLD''は変更されません。 – Guffa

+0

私はGuffaが言ったことをもう一度;ここでの説明はこうです:https://msdn.microsoft.com/en-us/library/system.globalization.textinfo.totitlecase.aspx –

6

使用名前空間:using System.Globalization;

あなたが(すべての文字が最初のものを除いて、下に変換)尋ね、あなたは次の操作を行うことができexectlyをを達成するために


。 ..

string value = CultureInfo.CurrentCulture.TextInfo.ToTitleCase("hello"); 

EDIT

このコードは、単一の単語の場合にのみ機能します。すべての文字を最初の文字以外の文字に変換するには、Guffa Answerを選択します。

string value = myString.Substring(0, 1) + myString.Substring(1).ToLower(); 
+1

それはOPが求めたことをしません。文字列「これとそれ」を「これとそれ」に変えるのではなく、それを「これとそれ」に変換します。 – Guffa

+0

補足: 'ToTitleCase'が大文字の大文字の文字列をそのまま残していることに気がつきました。それは ''これと ''それを ''これと ''に変換しますが、 ''これとそれは ''そのままです。 – Guffa

3

ないあなたがここにLINQでそれを行うことができることを確認して非LINQのアプローチです:

public static string FirstCap(string value) 
    { 
     string result = String.Empty; 

     if(!String.IsNullOrEmpty(value)) 
     { 
      if(value.Length == 1) 
      { 
       result = value.ToUpper(); 
      } 
      else 
      { 
       result = value.Substring(0,1).ToString().ToUpper() + value.Substring(1).ToLower(); 
      } 
     } 

     return result; 
    } 
18

これは、単純な文字列操作を行うことができます。

s = s.Substring(0, 1) + s.Substring(1).ToLower(); 

注これがないことつまり、すべての文字を変更せずに残した最初の文字を除く小文字に変換します。

あなたの代わりにも大文字に最初の文字を変更したい場合は、あなたがどうなる:

s = s.Substring(0, 1).ToUpper() + s.Substring(1).ToLower(); 

(注)このコードは、文字列に少なくとも2つの文字があることを前提としていること。短くなる可能性がある場合は、最初にそのテストを行う必要があります。

+1

これは明らかに必要に応じて拡張メソッドにうまく変換できます。:) –

+0

このコードは単一の文字列で動作します。 –

3

上記のguffaの例に基づいています(少し修正されています)。あなたは(悪いという名前のメソッドをご容赦ください:))拡張メソッドにそれを変換することができます:

public static string UpperFirst(this string source) 
{ 
    return source.ToLower().Remove(0, 1) 
      .Insert(0, source.Substring(0, 1).ToUpper()); 
} 

用法:

var myNewString = myOldString.UpperFirst(); 
// or simply referenced as myOldString.UpperFirst() where required 

歓声guffa

+0

非常に有用な情報、ありがとう。 – Ricky

2
var initialString = "Hello hOW r u?";   

var res = string.Concat(initialString..ToUpper().Substring(0, 1), initialString.ToLower().Substring(1)); 
+0

priyankaもちろん、最初の文字列ToUpper()を設定する必要があります:-)そうでなければ、小文字の文字列を毎回送信します(ただし、最初の文字が本当に大文字だった場合は例外です) 。 –

関連する問題