Usuń ostatni znak łańcucha
Pobieram wiele informacji na liście, połączonej z bazą danych i chcę utworzyć ciąg grup, dla kogoś, kto jest podłączony do strony internetowej.
Używam tego do testowania, ale to nie jest dynamiczne, więc jest naprawdę źle:
string strgroupids = "6";
Chcę tego użyć teraz. Ale zwracany łańcuch jest czymś w rodzaju 1,2,3,4,5,
groupIds.ForEach((g) =>
{
strgroupids = strgroupids + g.ToString() + ",";
strgroupids.TrimEnd(',');
});
strgroupids.TrimEnd(new char[] { ',' });
Chcę usunąć ,
Po 5
, ale na pewno nie działa.
11 answers
strgroupids = strgroupids.Remove(strgroupids.Length - 1);
Sznurek.Remove (Int32):
Usuwa wszystkie znaki z tego ciągu rozpoczynającego się od określonego pozycja i kontynuacja przez ostatnią pozycję
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-26 10:22:50
A co z robieniem tego w ten sposób
strgroupids = string.Join( ",", groupIds );
Alot cleaner.
Doda wszystkie elementy wewnątrz groupIds
z ','
pomiędzy każdym, ale nie umieści ','
na końcu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-26 10:23:31
Ciągi w c# są niezmienne. Gdy w Twoim kodzie robisz strgroupids.TrimEnd(',');
LUB strgroupids.TrimEnd(new char[] { ',' });
strgroupids
ciąg nie jest modyfikowany .
strgroupids = strgroupids.TrimEnd(',');
.
Cytuję z tutaj :
Łańcuchy są niezmienne--zawartość obiektu string nie może być zmieniany po wytworzeniu obiektu, choć składnia czyni go wygląda na to, że możesz to zrobić. Na przykład, kiedy piszesz ten kod, kompilator faktycznie tworzy nowy obiekt string do hold the new sekwencji znaków, a ten nowy obiekt jest przypisany do b. W ciąg " h " kwalifikuje się wtedy do usuwania śmieci.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-26 10:29:13
Dodaj metodę rozszerzenia.
public static string RemoveLast(this string text, string character)
{
if(text.Length < 1) return text;
return text.Remove(text.ToString().LastIndexOf(character), character.Length);
}
Następnie użyj:
yourString.RemoveLast(",");
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-26 20:24:26
Usuwa przecinki końcowe:
while (strgroupids.EndsWith(","))
strgroupids = strgroupids.Substring(0, strgroupids.Length - 1);
To jest jednak odwrotnie, napisałeś kod, który dodaje przecinek na pierwszym miejscu. Zamiast tego należy użyć string.Join(",",g)
, zakładając, że g
jest string[]
. Nadaj jej też lepszą nazwę niż g
!
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-26 10:22:25
W C# 8 wprowadzono zakresy i indeksy , dając nam nowe, bardziej zwięzłe rozwiązanie:
strgroupids = strgroupids[..^1];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-01-26 21:06:42
Jako alternatywę do dodawania przecinka dla każdego elementu można po prostu użyć String.Join:
var strgroupids = String.Join(",", groupIds);
Spowoduje dodanie separatora ("," w tym przypadku) pomiędzy każdym elementem tablicy.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-26 10:24:59
string strgroupids = string.Empty;
groupIds.ForEach(g =>
{
strgroupids = strgroupids + g.ToString() + ",";
});
strgroupids = strgroupids.Substring(0, strgroupids.Length - 1);
Zauważ, że użycie ForEach
tutaj jest zwykle uważane za " złe " (czytaj na przykład http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx )
Używając LINQ:
string strgroupids = groupIds.Aggregate(string.Empty, (p, q) => p + q + ',');
strgroupids = strgroupids.Substring(0, str1.Length - 1);
Bez podciągu końcowego:
string strgroupids = groupIds.Aggregate(string.Empty, (p, q) => (p != string.Empty ? p + "," + q : q.ToString()));
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-26 10:29:39
Dodatkowe rozwiązanie sll: lepiej przyciąć łańcuch w przypadku, gdy są jakieś puste (s) na końcu.
strgroupids = strgroupids.Remove(strgroupids.Trim().Length - 1);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-22 17:04:40
string.Join
jest lepsze, ale jeśli naprawdę chcesz LINQ ForEach
:
var strgroupids = string.Empty;
groupIds.ForEach(g =>
{
if(strgroupids != string.Empty){
strgroupids += ",";
}
strgroupids += g;
});
Kilka uwag:
-
string.Join
iforeach
są lepsze od tego, znacznie wolniejsze, podejście - nie ma potrzeby usuwania ostatniego
,
, ponieważ nigdy nie jest dołączany - operator increment (
+=
) jest przydatny do dodawania do łańcuchów -
.ToString()
jest niepotrzebny, ponieważ jest wywoływany automatycznie podczas łączenia nie-ciągów - podczas obsługi dużych łańcuchów,
StringBuilder
powinny być rozważane zamiast konkatenacji strun
Nie ma na to żadnego "szybkiego i brudnego" sposobu. Zwykle tak:
mystring= string.Concat(mystring.Take(mystring.Length-1));
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-09-16 15:10:37