2010-12-13 9 views

Odpowiedz

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

Ładna, ciekawa odpowiedź, ale nie sądzę, że LINQ jest właściwym narzędziem dla tak niskiego poziomu operacji. – ProfK

+2

Uzgodnione. Podniosłem też odpowiedź Odeda. Ale jest to coś, co chciałem spróbować użyć LINQ, jak powiedział OP. – decyclone

28

Jeśli masz tylko jedno słowo w ciąg, można użyć TextInfo.ToTitleCase. Nie musisz używać Linq.

Jak @Guffa zauważył:

To będzie przekonwertować dowolny ciąg do tytułowej przypadku, tak, "Hello World" i "Hello World" będzie zarówno być przekształcone w "Hello World".


Aby osiągnąć exectly co pytasz (przekonwertować wszystkie znaki na niższe, z wyjątkiem pierwszego), można wykonać następujące czynności:

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

To nie robi tego, o co prosił OP. Zamiast zamieniać ciąg '" THIS AND THAT "' na '" To i tamto "' zamieni to na '" This And That "'. – Guffa

+3

Dodatek: Właśnie zauważyłem, że 'ToTitleCase' pozostawia ciąg bez wielkich liter. To zmieni "Hello world" w "Hello World", ale pozostawi "HELLO WORLD" w niezmienionej postaci. – Guffa

+0

Po drugie, co powiedział Guffa; opis tutaj mówi: https://msdn.microsoft.com/en-us/library/system.globalization.textinfo.totitlecase.aspx –

6

Używaj nazw: using System.Globalization;

. ..

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

EDYCJA

Ten kod działa tylko wtedy, gdy jego pojedyncze słowo. Aby przekonwertować wszystkie znaki na niższe, z wyjątkiem pierwszej litery, sprawdź odpowiedź Guffa.

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

To nie robi tego, o co prosił OP. Zamiast zamieniać ciąg '" THIS AND THAT "' na '" To i tamto "' zamieni to na '" This And That "'. – Guffa

+0

Dodatek: Właśnie zauważyłem, że 'ToTitleCase' pozostawia ciąg bez wielkich liter. Zmieni to "" to i tamto "w" "To i To" ', ale pozostawi' 'TO I TAK" 'niezmienione. – Guffa

3

Nie wiem, można to zrobić w LINQ Oto non-LINQ podejście:

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

Można to zrobić za pomocą prostych operacji strun:

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

Zauważ, że to robi dokładnie to, o co prosiłeś, tzn. zamienia wszystkie znaki na małe litery, z wyjątkiem pierwszego niezmienionego.

Jeśli zamiast też chcą zmienić pierwszy znak na wielkie litery, należy zrobić:

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

Zauważ, że ten kod zakłada, że ​​istnieje co najmniej dwa znaki w struny. Jeśli istnieje możliwość, że jest krótszy, powinieneś oczywiście najpierw to sprawdzić.

+1

które oczywiście mogłyby być ładnie przekonwertowane na metodę rozszerzenia, jeśli to konieczne .. :) –

+0

Ten kod będzie działał z pojedynczym ciągiem znaków. –

3

na podstawie powyższego przykładu guffy (nieznacznie zmienione). można przekonwertować na metodę rozszerzenia (proszę wybaczyć źle nazwie metody :)):

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

wykorzystania:

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

okrzyki Guffa

+0

Bardzo przydatne informacje, dziękuję. – Ricky

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

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

priyanka, oczywiście będziesz musiał ustawić pierwszą część tego initialString ToUpper() :-) W przeciwnym razie po prostu wyślesz za każdym razem mały ciąg znaków (chyba że pierwsza litera jest rzeczywiście wielką literą - tak jak twój przykład) . –

Powiązane problemy