Jak przekonwertować ciąg na małe litery z wyjątkiem pierwszego znaku? Czy można to uzupełnić LINQ?Jak wprowadzić małe litery z wyjątkiem pierwszego znaku za pomocą C#
Dzięki
Jak przekonwertować ciąg na małe litery z wyjątkiem pierwszego znaku? Czy można to uzupełnić LINQ?Jak wprowadzić małe litery z wyjątkiem pierwszego znaku za pomocą C#
Dzięki
String newString = new String(str.Select((ch, index) => (index == 0) ? ch : Char.ToLower(ch)).ToArray());
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();
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
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
Po drugie, co powiedział Guffa; opis tutaj mówi: https://msdn.microsoft.com/en-us/library/system.globalization.textinfo.totitlecase.aspx –
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();
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
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
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;
}
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ć.
które oczywiście mogłyby być ładnie przekonwertowane na metodę rozszerzenia, jeśli to konieczne .. :) –
Ten kod będzie działał z pojedynczym ciągiem znaków. –
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
Bardzo przydatne informacje, dziękuję. – Ricky
var initialString = "Hello hOW r u?";
var res = string.Concat(initialString..ToUpper().Substring(0, 1), initialString.ToLower().Substring(1));
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) . –
cant tylko małe litery to wszystko a następnie ponownie wpisać wielką literę w pierwszy znak? – Lloyd
lloyd, zrobił to, zobacz moją odpowiedź poniżej :) –