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.


$config[zx-auto] not found$config[zx-overlay] not found