Mam:
string test = "9586-202-10072"
Jak miałbym -umieścić wszystkie znaki na prawo od końcowego, więc 10072. Liczba znaków jest zawsze różna na prawo od ostatniego myślnika.
Jak to zrobić?
Mam:
string test = "9586-202-10072"
Jak miałbym -umieścić wszystkie znaki na prawo od końcowego, więc 10072. Liczba znaków jest zawsze różna na prawo od ostatniego myślnika.
Jak to zrobić?
Odpowiedzi:
Możesz uzyskać pozycję ostatniego za -pomocą str.LastIndexOf('-'). Więc następny krok jest oczywisty:
var result = str.Substring(str.LastIndexOf('-') + 1);
Korekta :
Jak Brian stwierdza poniżej, użycie this na łańcuchu bez myślników spowoduje zwrócenie tego samego ciągu.
LastIndexOfzwraca -1, jeśli nic nie zostanie znalezione (jest to udokumentowane zachowanie, więc można na nim bezpiecznie polegać). str.Substring(1-1)daje ciąg równy str. Bez niespodzianek.
Możesz użyć LINQ i zapisać sobie jawną analizę:
string test = "9586-202-10072";
string lastFragment = test.Split('-').Last();
Console.WriteLine(lastFragment);
Widzę, że ten post został obejrzany ponad 46 000 razy. Założę się, że wielu z 46 000 widzów zadaje to pytanie po prostu dlatego, że chcą tylko nazwy pliku ... a te odpowiedzi mogą być króliczą dziurą, jeśli nie możesz napisać podciągu dosłownie za pomocą znaku at.
Jeśli chcesz po prostu uzyskać nazwę pliku, istnieje prosta odpowiedź, o której należy tutaj wspomnieć. Nawet jeśli nie jest to dokładna odpowiedź na pytanie.
result = Path.GetFileName(fileName);
zobacz https://msdn.microsoft.com/en-us/library/system.io.path.getfilename(v=vs.110).aspx
Zobacz metodę String.lastIndexOf
string atest = "9586-202-10072";
int indexOfHyphen = atest.LastIndexOf("-");
if (indexOfHyphen >= 0)
{
string contentAfterLastHyphen = atest.Substring(indexOfHyphen + 1);
Console.WriteLine(contentAfterLastHyphen );
}
Stworzyłem do tego rozszerzenie ciągu, mam nadzieję, że to pomoże.
public static string GetStringAfterChar(this string value, char substring)
{
if (!string.IsNullOrWhiteSpace(value))
{
var index = value.LastIndexOf(substring);
return index > 0 ? value.Substring(index + 1) : value;
}
return string.Empty;
}
strjest zerowe, albo w ogóle nie zawiera łącznika. (W przypadku, gdy nie ma łącznika, nie rzuca; zwraca cały ciąg źródłowy.)