Miért nem távolítja el a trim () a char 160-t?
On január 31, 2021 by admin Van egy forgatókönyvem, ahol egy PicklistEntry
címke tartalmaz egy 160 karaktert (nem törő szóköz) a az érték vége. Tehát amikor felhívom a pe.label.getChars()
szót, a tömb kimenete a következő karakterek: (104, 101, 108, 108, 111, 160)
.
Ha felhívom a trim()
majd getChars()
, azt várom, hogy a záró 160 karakter eltávolításra kerül. Azonban nem. Amikor a 32-es karaktert használom, a trim()
helyesen eltávolítja.
Ezenkívül a normalizeSpace()
használatával Távolítsa el a 160-as karaktert .
Tehát a fő kérdésem az, hogy miért nem “t trim()
távolítja el ezt a karaktert, míg a normalizeSpace()
?
Lásd az alábbi kód példát.
// get "hello " from character array using 160 for space String hello = String.fromCharArray(new Integer[] { 104, 101, 108, 108, 111, 160 }); System.debug("==>" + hello.trim()); //output ==> "hello " // get "hello " from character array using 32 for space hello = String.fromCharArray(new Integer[] { 104, 101, 108, 108, 111, 32 }); System.debug("==>" + hello.trim()); //output ==> "hello" // get "hello " from character array using 160 for space and call normalizeSpace() hello = String.fromCharArray(new Integer[] { 104, 101, 108, 108, 111, 160 }); System.debug("==>" + hello.normalizeSpace()); //output ==> "hello"
SZERKESZTÉS Ezen túlmenően, amikor hívom az normalizeSpace()
számot, a 160 karakter valójában 32-es jellé alakul. Tehát ahhoz, hogy a 160-at és a további 32-et teljesen levágjam, meg kell hívnom a normalizeSpace().trim()
String hello = String.fromCharArray(new Integer[] { 104, 101, 108, 108, 111, 160 }); String normalized = hello.normalizeSpace(); System.debug("==>" + normalized); //output ==> "hello" System.debug("==>" + normalized.getChars()); //output ==> (104, 101, 108, 108, 111, 32)
Válasz
A dokumentáció a vágáshoz a következőket mondja:
Az ASCII vezérlő karakterek, például a tabulátorok és az új sor karakterek vezető és záró karakterek szintén törlődik. A szóköz és a vezérlő karakterek, amelyek nem a mondat elején vagy végén vannak, nem kerülnek eltávolításra.
Ha ezt szó szerint vesszük, akkor csak a szóköz (ASCII 32), a tabulátor (ASCII 9), a sor előtolás (ASCII 10) és a kocsi visszaadása (ASCII 13) törlődik, egyéb üres helyek, például a nem törő tér, a nulla szélességű tér stb. Ennek valószínűleg az az oka, hogy a trim egy nagyon régi módszer, az Apex elejére nyúlik vissza, míg a normalizeWhitepace viszonylag új.
Gyors alternatívaként, aminek meg kell tennie szeretné:
// get " hello " from character array using 160 for space String hello = String.fromCharArray(new Integer[] { 160, 104, 101, 108, 108, 111, 160 }); System.debug("==>"" + hello.replaceAll("^\\p{IsWhite_Space}+|\\p{IsWhite_Space}+$","")+"""); //output ==>"hello"
^\\p{IsWhite_Space}+|\\p{IsWhite_Space}+$
. ' A válaszban példát adok az Ön számára.