Kezdőoldal » Számítástechnika » Programozás » Ez miért így működik C#-ban...

Ez miért így működik C#-ban (IndexOf, LastIndexOf)?

Figyelt kérdés

Adott egy szöveg, aminek az első és utolsó specifikus karakterét akarom trimelni úgy, hogy ez a karakter előfordulhat a szöveg közepén is.


Ha ezt IndexOf-al és a LastIndexOf-al, illetve a Remove függvényekkel tenném meg két lépésben:


var a = "\"asd\"\"" // "asd""-ból akarnék asd"-ot.

if (a.IndexOf('\"', 0) == 0) a = a.Remove(a.IndexOf('\"', 0), 1); // Ezzel szépen el is távolítom az első " karaktert.


if (a.LastIndexOf('\"', 0) == 0) a = a.Remove(a.LastIndexOf('\"', 0), 1);


A probléma, amit nem értek (a feladatot nyilván meg bírom oldani és biztosan van rá egyszerűbb megoldás is) az az, hogy az alap esetben "asd""-nál az indexof és a lastindexof is helyesen 0.


Viszont miután remove-oltam az első " karaktert, így a 2. if-nél az asd""-on végzett lastindexof már -1-es index-et ad vissza, mintha az első remove után egy whitespace került volna a string végére. Tehát olyan, mintha a remove után az egész balra csúszott volna 1 karakterrel.


2020. febr. 27. 11:23
 1/5 A kérdező kommentje:
De ahogy nézem, nem whitespace-ről van szó, hanem valamiért az eredeti string hosszához viszonyított pozícióját adja vissza a keresett karakternek, nem pedig a módosított stringen belüli pozícióját.
2020. febr. 27. 11:26
 2/5 anonim ***** válasza:
Az IndexOf -1-et ad vissza, ha nincs találat. Egyébként a Remove is simán elég neked, a.Remove(0,1) és a.Remove(a.length - 1)
2020. febr. 27. 11:49
Hasznos számodra ez a válasz?
 3/5 A kérdező kommentje:

Közben rájöttem a problémára. Valamiért azt gondoltam, hogy a LastIndexOf hátulról iterál előre a stringben és úgy keresi az első egyező karaktert, de ugyan úgy megy végig a stringen, mint a sima IndexOf.


Amit igazából még mindig nem értek, hogy miért így írták meg, mert ha utolsó egyező karaktert keresünk, akkor nem lenne hatékonyabb, ha hátulról iterálnánk a szövegen addig, amíg nem találjuk meg a karaktert?


Ha a LastIndex által keresett index a szöveg 2. felében van, akkor mindenképpen hatékonyabb lenne hátulról indulni, ellenkező esetben meg nyilván nem, szóval talán azért maradhattak ennél a megvalósításnál, hogy egységesebb legyen a működésük?

2020. febr. 27. 11:59
 4/5 anonim ***** válasza:
A lastindexof az utolsó előfordulási helyét adja vissza egy adott karakternek, nem pedig az utolsó karakter indexét. Pl "abcd" string esetén lastindexof 'a' az 0.
2020. febr. 27. 12:09
Hasznos számodra ez a válasz?
 5/5 anonim ***** válasza:

Ha a karakter összes előfordulását elakarod távolítani, akkor így a legegyszerűbb:

a.Replace("\\", "");

Ha csak a két szélén:

a.Trim('\\');

2020. febr. 27. 13:06
Hasznos számodra ez a válasz?

További kérdések:





Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!