Közös karakterlánc-műveletek a Java-ban
1. Bemutatkozás
A karakterlánc-alapú értékek és műveletek meglehetősen gyakoriak a mindennapi fejlesztések során, és minden Java-fejlesztőnek képesnek kell lennie ezek kezelésére.
Ebben az oktatóanyagban egy gyors cheat sheet-et adunk meg Húr tevékenységek.
Ezenkívül megvilágítjuk a különbségeket egyenlő és „==” és között StringUtils # isBlank és #üres.
2. A karakter átalakítása húrokká
A char egy karaktert képvisel a Java-ban. De a legtöbb esetben szükségünk van a Húr.
Kezdjük tehát az átalakítással chars bele Húrs:
String toStringWithConcatenation (utolsó karakter c) {return String.valueOf (c); }
3. Húrok hozzáfűzése
Egy másik gyakran szükséges művelet a karakterláncok hozzáfűzése más értékekkel, például a char:
String appendWithConcatenation (végső karakterlánc előtag, végső char c) {return előtag + c; }
Más alaptípusokat az a-val egészíthetünk ki StringBuilder is:
String appendWithStringBuilder (utolsó karakterlánc előtag, végső karakter c) {return új StringBuilder (előtag) .append (c) .toString (); }
4. Karakter keresése index szerint
Ha egy karaktert ki kell szúrnunk egy karakterláncból, az API mindent megad, amit akarunk:
char getCharacterByIndex (végleges karakterlánc-szöveg, végső int index) {return text.charAt (index); }
Mivel a Húr használja a char [] mint háttéradat-struktúra, az index nulláról indul.
5. ASCII-értékek kezelése
Könnyen válthatunk az a között char és numerikus ábrázolása (ASCII) a következő öntéssel:
int asciiValue (utolsó karakter) {return (int) karakter; } char fromAsciiValue (végső int érték) {Assert.isTrue (érték> = 0 && érték <65536, "az érték nem érvényes karakter"); hozam (char) érték; }
Természetesen, mivel egy int 4 előjel nélküli bájt és a char 2 előjel nélküli bájt, ellenőriznünk kell, hogy legális karakterértékekkel dolgozunk-e.
6. Az összes szóköz eltávolítása
Néha meg kell szabadulnunk néhány karaktertől, leggyakrabban a szóköztől. A jó módszer a csereAll módszer reguláris kifejezéssel:
String removeWhiteSpace (végleges karakterlánc-szöveg) {return text.replaceAll ("\ s +", ""); }
7. A gyűjtemények összekapcsolása egy húrral
Egy másik gyakori felhasználási eset, amikor van valamilyen Gyűjtemény és szeretnénk létrehozni belőle egy karakterláncot:
String fromCollection (végleges gyűjteménygyűjtemény) {return collection.stream (). Map (Objects :: toString) .collect (Collectors.joining (",")); }
Figyeljük meg, hogy a Gyűjtők.csatlakozás lehetővé teszi az előtag vagy az utótag megadását.
8. Húr szétválasztása
Vagy másrészt elválaszthatunk egy karakterláncot elválasztóval a hasított módszer:
Karakterlánc [] splitByRegExPipe (utolsó karakterlánc szöveg) adja vissza a text.split ("\
Ismét itt használunk reguláris kifejezést, ezúttal egy pipával hasítva. Mivel egy speciális karaktert akarunk használni, el kell menekülnünk előle.
Egy másik lehetőség a Minta osztály:
Karakterlánc [] splitByPatternPipe (utolsó karakterlánc szövege) "));
9. Az összes karakter feldolgozása adatfolyamként
Részletes feldolgozás esetén átalakíthatunk egy karakterláncot an-vá IntStream:
IntStream getStream (final String text) {return text.chars (); }
10. Referenciaegyenlőség és értékegyenlőség
Bár a húrok úgy néznek ki, mint egy primitív típus, nem azok.
Ezért meg kell különböztetnünk a referenciaegyenlőséget és az értékegyenlőséget. A referenciaegyenlőség mindig magában foglalja az értékegyenlőséget, de általában nem fordítva. Az elsőt a ’==’ művelettel, az utóbbit a egyenlő módszer:
@Test public void whenUsingEquals_thenWeCheckForTheSameValue () {assertTrue ("Az érték egyenlő", új karakterlánc ("Teszt"). Egyenlő ("Teszt")); } @Test public void whenUsingEqualsSign_thenWeCheckForReferenceEquality () {assertFalse ("A hivatkozások nem egyenlőek", új karakterlánc ("teszt") == "teszt"); }
Figyelje meg, hogy a literálok a húrkészletben vannak internálva. Ezért a fordító időnként optimalizálhatja őket ugyanarra a hivatkozásra:
@Test public void whenTheCompileCanBuildUpAString_thenWeGetTheSameReference () {assertTrue ("A literálokat a fordító összefűzi", "Test" == "Te" + "st"); }
11. Üres húr vs. üres húr
Finom különbség van a között isBlank és üres.
Egy karakterlánc üres, ha van nulla vagy hossza nulla. Mivel a karakterlánc üres, ha null, vagy csak szóköz karaktereket tartalmaz:
@Test public void whenUsingIsEmpty_thenWeCheckForNullorLengthZero () {assertTrue ("null üres", isEmpty (null)); assertTrue ("semmi sem üres", isEmpty ("")); assertFalse ("a szóköz nem üres", isEmpty ("")); assertFalse ("a szóköz nem üres", isEmpty ("\ n")); assertFalse ("a szóköz nem üres", isEmpty ("\ t")); assertFalse ("a szöveg nem üres", isEmpty ("Bármi!")); } @Test public void whenUsingIsBlank_thenWeCheckForNullorOnlyContainingWhitespace () {assertTrue ("null üres", isBlank (null)); assertTrue ("semmi sem üres", isBlank ("")); assertTrue ("a szóköz üres", isBlank ("\ t \ t \ t \ n \ r")); assertFalse ("a teszt nem üres", isBlank ("Bármi!")); }
12. Következtetés
A húrok minden típusú alkalmazásban alapvető típusok. Ebben az oktatóanyagban megtanultunk néhány kulcsfontosságú műveletet a közös forgatókönyvekben.
Ezenkívül részletesebb hivatkozásokhoz adtunk útmutatást.
Végül a teljes kód és az összes példa a GitHub-tárunkban érhető el.