Visualizzazione dei risultati da 1 a 5 su 5

Discussione: JSoup,   e trim()

  1. #1
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    JSoup,   e trim()

    Salve,
    sto usando JSoup per estrarre del testo da una pagina html. Funziona tutto molto bene ma c'è una cosa che mi sta dando qualche grattacapo.

    Faccio un esempio.
    Nella pagina ad un certo punto ho del testo in questo formato:

    codice:
    <div class="name"> Mario Rossi</p>
    (i primi due spazi sono & nbsp; )

    Io lo recupero con

    codice:
    Elements rows = Jsoup.parse(html).select("tr");
    
        //... rows iteration...
        Element e = row.select("div[class=name]");
        String name = e.text().trim();
    Il problema è che la stringa risultante non è "Mario Rossi" ma " Mario Rossi", come se non facesse il trim(). Aprendo il risultato con Notepad++ ho notato che non viene converito in " " ma in un altro carattere, a quanto pare non riconosciuto come "whitespace" da trim().

    Qualche idea? Guardando tra la documentazione di Jsoup non mi pare di aver trovato qualcosa di utile...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: JSoup, &nbsp; e trim()

    Originariamente inviato da Alex'87
    Il problema è che la stringa risultante non è "Mario Rossi" ma " Mario Rossi", come se non facesse il trim(). Aprendo il risultato con Notepad++ ho notato che &nbsp; non viene converito in " " ma in un altro carattere, a quanto pare non riconosciuto come "whitespace" da trim().
    Il nbsp (non-breaking space), se convertito correttamente, dovrebbe dare il codice Unicode U+00A0. E purtroppo trim() non lo considera, perché tratta come "whitespace" soltanto qualunque cosa inferiore/uguale a U+0020 (in pratica lo "spazio" e i primi 32 codici ASCII).

    Hai almeno 2 possibilità:
    - fare il trim direttamente con una regex (una o due se separate per ciascun lato della stringa).
    - fare un replace che converta U+00A0 in U+0020 e poi fare il trim().
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: Re: JSoup, &nbsp; e trim()

    Originariamente inviato da andbin
    Il nbsp (non-breaking space), se convertito correttamente, dovrebbe dare il codice Unicode U+00A0. E purtroppo trim() non lo considera, perché tratta come "whitespace" soltanto qualunque cosa inferiore/uguale a U+0020 (in pratica lo "spazio" e i primi 32 codici ASCII).

    Hai almeno 2 possibilità:
    - fare il trim direttamente con una regex (una o due se separate per ciascun lato della stringa).
    - fare un replace che converta U+00A0 in U+0020 e poi fare il trim().
    Ti ringrazio.
    Esatto, il nbsp mi arriva come \u00a0.
    Per ora ho risolto con una replace()

    codice:
    author.setName(dd.get(i).text().replace("\u00a0", "").trim());
    Speravo ci fosse qualcosa in Jsoup per trimmare ma pare di no, mi sono spulciato tutta la javadoc...

    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Re: Re: JSoup, &nbsp; e trim()

    Originariamente inviato da Alex'87
    codice:
    author.setName(dd.get(i).text().replace("\u00a0", "").trim());
    Occhio, perché sostituendo con nulla, se il nbsp è da solo in mezzo a due parole ... le unisci! Per questo ho suggerito prima di sostituirlo con spazio.

    Originariamente inviato da Alex'87
    Speravo ci fosse qualcosa in Jsoup per trimmare ma pare di no, mi sono spulciato tutta la javadoc...
    Allora avrai visto che c'è una classe StringUtil con un normaliseWhitespace. Peccato che guardando il sorgente su GitHub si vede che usa un metodo isWhitespace che non è quello di Character (che tratta anche '\u00A0') ma è quello in StringUtil, che tratta solo spazio e \t \n \f \r.
    Percui anche io giungerei alla conclusione che in jsoup non esiste qualcosa per trimmare o comunque eliminare il nbsp.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802

    Re: Re: Re: Re: JSoup, &nbsp; e trim()

    Originariamente inviato da andbin
    Occhio, perché sostituendo con nulla, se il nbsp è da solo in mezzo a due parole ... le unisci! Per questo ho suggerito prima di sostituirlo con spazio.
    Sì, hai ragione. Per ora ho notato che il nbsp lo trovo solo all'inizio delle stringhe (viene usato per "indentare" i nomi) ma chissà che porcherie potrebbero arrivarmi dall'altra parte (sulla parte server non ho controllo)


    Originariamente inviato da andbin
    Allora avrai visto che c'è una classe StringUtil con un normaliseWhitespace. Peccato che guardando il sorgente su GitHub si vede che usa un metodo isWhitespace che non è quello di Character (che tratta anche '\u00A0') ma è quello in StringUtil, che tratta solo spazio e \t \n \f \r.
    Percui anche io giungerei alla conclusione che in jsoup non esiste qualcosa per trimmare o comunque eliminare il nbsp.
    Sì sì la StringUtil l'avevo trovata e avevo visto che non faceva al mio caso.
    Proverò ad aprire una issue su github su questa cosa

    Intanto grazie!
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.