Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno C# - jak najít poslední lomítko? IndexOf?

V C# potřebuji ve stringu najít poslední / v URL a vše do toho místa smazat. Zkoušel jsem to přes Remove, Trim, IndexOf ale nikde to neumím dotáhnout dokonce. No a když jsem zkusil Céčkovou logiku: while tak dlouho jdi od konce dokud nenarazíš na / . tu pozici i pak použít v jmeno_stringu.Remove(0, i);
tak mi to padalo na řádku list_stringu[radek].ToString(); ... sem nějak zmatenej ...:-|

Předmět Autor Datum
jmeno_stringu.Substring(0,jmeno_stringu.LastIndexOf (" "))
Wikan 18.06.2008 19:32
Wikan
Mas v tom dost hokej. Pozri si ake mas metody v triede String http://msdn.microsoft.com/en-us/librar…
MM.. 18.06.2008 19:32
MM..
Očima laika: string nejakyMujRetezec = "sdfsd/dfgdf/ftre"; nejakyMujRetezec = nejakyMujRetezec.Subs…
Flash_Gordon 18.06.2008 19:33
Flash_Gordon
diky chlapi, ale fakt mam v tom hokej: zkompiluju následující kód: string name = fronta[currentDow…
thomas 18.06.2008 20:25
thomas
A sdelis nam co je fronta a currentDownload nebo si to budem muset vycucat z prstu?
Wikan 18.06.2008 20:47
Wikan
Daj si na ten riadok breakpoint (F9) a pozri sa, že či je fronta, currentDownload alebo fronta[curre…
los 18.06.2008 20:48
los
já jsem chujo, trasuju to, ale nedocvaklo mi že když je to null... díky :beer: bylo to tím, že na z…
thomas 18.06.2008 20:53
thomas
fronta je List stringů currentDownload je typu int a počítá inkrementálně kolikátý soubor se stahuje…
thomas 18.06.2008 20:49
thomas
Ak je to List<string>, tak volanie metódy ToString je zbytočné. Takže môžeš nahradiť fronta[currentD… poslední
los 18.06.2008 20:54
los

Mas v tom dost hokej.
Pozri si ake mas metody v triede String
http://msdn.microsoft.com/en-us/library/system.stri ng_members(VS.80).aspx
a pouzijes LastIndexOf (potom si prip. mozes osetrit situaciu ked znak neexistuje) a potom pouzijes Remove alebo Substring

P.S. Do metody Remove sa dava ako parameter to co ma odstranit, takze v tvojom pripade co si ty skusal Remove(0,i) by odstranil znaky 0 az i. A naco si potom potreboval ToString to nechapem vobec.

Očima laika:

string nejakyMujRetezec = "sdfsd/dfgdf/ftre";
nejakyMujRetezec = nejakyMujRetezec.Substring(0, nejakyMujRetezec.LastIndexOf("/"));
MessageBox.Show(nejakyMujRetezec);

//Edit a nebo jsem si to špatně přečetl, takže druhá varianta (vše po lomítku bude takhle):

string nejakyMujRetezec = "sdfsd/dfgdf/ftre";
nejakyMujRetezec = nejakyMujRetezec.Substring(nejakyMujRetezec.LastIndexOf("/"), nejakyMujRetezec.Length - nejakyMujRetezec.LastIndexOf("/"));
MessageBox.Show(nejakyMujRetezec);

diky chlapi, ale fakt mam v tom hokej:

zkompiluju následující kód:

string name = fronta[currentDownload].ToString(); //zde to pada :(
//zde mam ten substring co mi radite

a při debuggingu vyleze tabulka:

An unhandled exception of type 'Szstem.NullReferenceException' occured in exe.exe

Additional information: Object reference not set to an instance of an object

tlačítka Break, Continue, Ignore (nelze zvolit)

:-[

Daj si na ten riadok breakpoint (F9) a pozri sa, že či je fronta, currentDownload alebo fronta[currentDownload] rovné null. Potom zisti prečo a oprav to.

K pôvodnej otázke: Metóda LastIndexOf môže vrátiť -1 v prípade, že sa hľadaný text v reťazci nenachádza - je dobré na to myslieť. V tvojom prípade stačí metóde Substring poslať len prvý argument.

Neviem, aké používaš vývojové prostredie, ale Visual Studio ti pri chybe ukáže veľmi presne, v čom je problém. Odporúčam vyvíjať so zapnutým odchytávaním všetkých CLR výnimiek (Ctrl + Alt + E, zaškrtnúť Thrown pre CLR Exceptions).

já jsem chujo, trasuju to, ale nedocvaklo mi že když je to null... díky :beer:

bylo to tím, že na začátku třídy Form jsem měl List stringů a pak dál v metodě deklaroval a plnil list stringů- stačilo odstranit jen zdvojenou deklaraci :-[:-[

Zpět do poradny Odpovědět na původní otázku Nahoru