Perché trim () NON rimuove il carattere 160?
Su Gennaio 31, 2021 da admin Ho uno scenario in cui letichetta di un PicklistEntry
contiene un carattere 160 (spazio non interrotto) al fine del valore. Quindi, quando chiamo pe.label.getChars()
, loutput dellarray è costituito dai seguenti caratteri: (104, 101, 108, 108, 111, 160)
.
Se chiamo trim()
quindi getChars()
, mi aspetto che i 160 caratteri finali vengano rimossi. Tuttavia, non lo è. Quando utilizzo il carattere 32, trim()
lo rimuove correttamente.
Inoltre, luso di normalizeSpace()
RIMUOVE il carattere 160 .
Quindi la mia domanda principale è perché “t trim()
rimuove questo carattere mentre normalizeSpace()
lo fa?
Vedi lesempio di codice di seguito.
// 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"
EDIT Inoltre, quando si chiama normalizeSpace()
il carattere 160 viene effettivamente convertito in carattere 32. Quindi, per tagliare completamente il 160 e il 32 aggiuntivo, devo chiamare 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)
Rispondi
Il documentazione per il taglio dice:
I caratteri di controllo ASCII iniziali e finali come tabulazioni e caratteri di nuova riga sono rimosso. Gli spazi bianchi e i caratteri di controllo che non sono allinizio o alla fine della frase non vengono rimossi.
Prendendo questo letteralmente, solo lo spazio (ASCII 32), la tabulazione (ASCII 9), lavanzamento riga (ASCII 10) e il ritorno a capo (ASCII 13) verrebbero rimossi, lasciando inalterati altri spazi, come spazi unificatori, spazi a larghezza zero e così via. Ciò è probabilmente dovuto al fatto che trim è un metodo molto vecchio, che risale allinizio di Apex, mentre normalizeWhitespace è relativamente nuovo.
Come alternativa rapida che dovrebbe fare cosa vuoi:
// 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}+$
. ' includerò un esempio per te nella risposta.