Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it L'avatar di inc40
    Registrato dal
    Sep 2004
    Messaggi
    319

    String.contains case-insensitive

    Salve,
    esiste un modo per verificare se una stringa ne contiene un'altra e il controllo è case-insensitive?
    Praticamente se ho String str = "Questa è una Stringa", vorrei che mi venisse restituito 'vero' se verifico la presenza di 'stringa' all'interno di str.

    Un modo potrebbe essere quello di utilizzare str.contains("stringa") dopo aver prima convertito tutto in lowercase o uppercase, ma non voglio comunque perdere la stringa di partenza.

    Come posso fare?

    Grazie
    Gli uomini, non avendo potuto guarire la morte, la miseria, l'ignoranza, hanno risolto, per vivere felici, di non pensarci.

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

    Re: String.contains case-insensitive

    Originariamente inviato da inc40
    esiste un modo per verificare se una stringa ne contiene un'altra e il controllo è case-insensitive?
    Praticamente se ho String str = "Questa è una Stringa", vorrei che mi venisse restituito 'vero' se verifico la presenza di 'stringa' all'interno di str.

    Un modo potrebbe essere quello di utilizzare str.contains("stringa") dopo aver prima convertito tutto in lowercase o uppercase, ma non voglio comunque perdere la stringa di partenza.
    Mica è detto che devi "perderla" ... basta che non ne perdi il reference!!!! Le stringhe sono immutabili.

    boolean b = tuaStringa.toLowerCase().contains("stringa");

    tuaStringa non è cambiato ... continua a fare riferimento alla stringa originale con le maiuscole!

    Certo ... se avessi fatto:

    tuaStringa = tuaStringa.toLowerCase();

    allora sì, perdi il reference alla stringa originale (se non ce l'hai da qualche altra parte, ovviamente).

    Altre soluzioni? Sì ce ne sarebbero, ad esempio usare le espressioni regolari. Se la stringa da cercare è predefinita, non ci sono problemi (se ci fossero caratteri speciali da cercare, devi trattarli appositamente, vedi le regole delle regex).

    codice:
    import java.util.regex.*;
    
    Pattern p = Pattern.compile("stringa", Pattern.CASE_INSENSITIVE);
    Matcher m = p.matcher(tuaStringa);
    
    boolean b = m.find();
    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 inc40
    Registrato dal
    Sep 2004
    Messaggi
    319

    Re: Re: String.contains case-insensitive

    Originariamente inviato da andbin
    ...
    Altre soluzioni? Sì ce ne sarebbero, ad esempio usare le espressioni regolari. Se la stringa da cercare è predefinita, non ci sono problemi (se ci fossero caratteri speciali da cercare, devi trattarli appositamente, vedi le regole delle regex).

    codice:
    import java.util.regex.*;
    
    Pattern p = Pattern.compile("stringa", Pattern.CASE_INSENSITIVE);
    Matcher m = p.matcher(tuaStringa);
    
    boolean b = m.find();
    Grande andbin, veramente ottimo.
    E sai se esiste un modo per verificare se una stringa è 'propriamente' contenuta in un'altra?
    Ad esempio, se ho:
    String str1 = "Questa è unaStringa"
    e provo a cercare la stringa:
    String str2 = "una"
    all'interno di str1, la ricerca mi deve ritornare false, ossia str2 non deve essere parte di una 'parola' di str1.

    Grazie
    Gli uomini, non avendo potuto guarire la morte, la miseria, l'ignoranza, hanno risolto, per vivere felici, di non pensarci.

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

    Re: Re: Re: String.contains case-insensitive

    Originariamente inviato da inc40
    E sai se esiste un modo per verificare se una stringa è 'propriamente' contenuta in un'altra?
    Ad esempio, se ho:
    String str1 = "Questa è unaStringa"
    e provo a cercare la stringa:
    String str2 = "una"
    all'interno di str1, la ricerca mi deve ritornare false, ossia str2 non deve essere parte di una 'parola' di str1.
    Basta usare la espressione regolare:

    "\\buna\\b"

    \b significa "word boundary". Nota che così troverebbe "una" dentro "... una-prova" perché anche il passaggio da una lettera a un - è un "word boundary". Se non ti va bene, specifica cosa intendi tu per "word boundary". Che abbia attorno solo spazi?
    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 inc40
    Registrato dal
    Sep 2004
    Messaggi
    319

    Re: Re: Re: Re: String.contains case-insensitive

    Originariamente inviato da andbin
    Basta usare la espressione regolare:

    "\\buna\\b"

    \b significa "word boundary". Nota che così troverebbe "una" dentro "... una-prova" perché anche il passaggio da una lettera a un - è un "word boundary". Se non ti va bene, specifica cosa intendi tu per "word boundary". Che abbia attorno solo spazi?
    Grazie ancora andbin, sei davvero grande.
    Per il momento è importante che mi ritorni false se è contenuta in una 'parola'.
    In linea di massima comunque str2 deve essere una stringa 'a se stante' in str1 (non so se è corretto dire così...), nel senso che non deve essere contenuta in una 'parola', ma al più essere delimitata a destra e a sinistra da spazi e/o segni di punteggiatura.
    Ma dovrei vedere un po' quali 'testi' vengono immessi dall'utente per poter ben valutare.
    Potresti indicarmi magari qualche link dal quale posso apprendere informazioni a riguardo onde evitare di disturbarti di volta in volta.

    Grazie ancora per il tuo grande aiuto.

    Gli uomini, non avendo potuto guarire la morte, la miseria, l'ignoranza, hanno risolto, per vivere felici, di non pensarci.

  6. #6
    Utente di HTML.it L'avatar di inc40
    Registrato dal
    Sep 2004
    Messaggi
    319
    ...ancora una cosa:

    e possibile recuperare str2 all'interno di str1, mantenendo le maiuscole/minuscole?
    Cioè se ho sempre:
    String str1 = "Questa è UnA Stringa"
    e provo a cercare la stringa:
    String str2 = "una"
    all'interno di str1, vorrei che mi venisse ritornato 'true', e questo vabbè l'hai risolto alla grande, ma vorrei adesso recuperare anche la stringa 'UnA' all'interno di str1.

    Tutto questo perchè devo creare dei link ipertestuali, e vorrei che venisse mantenuta la formattazione della stringa str1.

    Grazie ancora
    Gli uomini, non avendo potuto guarire la morte, la miseria, l'ignoranza, hanno risolto, per vivere felici, di non pensarci.

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da inc40
    e possibile recuperare str2 all'interno di str1, mantenendo le maiuscole/minuscole?
    Cioè se ho sempre:
    String str1 = "Questa è UnA Stringa"
    e provo a cercare la stringa:
    String str2 = "una"
    all'interno di str1, vorrei che mi venisse ritornato 'true', e questo vabbè l'hai risolto alla grande, ma vorrei adesso recuperare anche la stringa 'UnA' all'interno di str1.
    Quando find() di Matcher trova l'occorrenza, puoi prendere tutta la parte matchata con group().

    Se la regex è quella che ho indicato con i \b non ci sono problemi, perché \b matcha un boundary, non un qualche carattere. Quindi ciò che ottieni è proprio la stringa che ti serve.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it L'avatar di inc40
    Registrato dal
    Sep 2004
    Messaggi
    319
    Originariamente inviato da andbin
    Quando find() di Matcher trova l'occorrenza, puoi prendere tutta la parte matchata con group().

    Se la regex è quella che ho indicato con i \b non ci sono problemi, perché \b matcha un boundary, non un qualche carattere. Quindi ciò che ottieni è proprio la stringa che ti serve.
    ...stavo lavorando proprio con group(), ma se str1 contiene più occorrenze di str2, group() me ne ritorna solo una, probabilmente l'ultima trovata.

    Dovrei utilizzare un ciclo dove verifico la presenza di str2 in str1, nel quale fare un replaceFirst() di str2 (così come è stato trovato in str1, rispettando cioè maiuscole e minuscole) con una stringa che contiene <a href>str2_così_come_in_str1</a> e ripetere il ciclo fin quando str2 non è più presente in str1.
    Ma per il momento ho ottenuto solo un ciclo infinito

    Gli uomini, non avendo potuto guarire la morte, la miseria, l'ignoranza, hanno risolto, per vivere felici, di non pensarci.

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da inc40
    ...stavo lavorando proprio con group(), ma se str1 contiene più occorrenze di str2, group() me ne ritorna solo una, probabilmente l'ultima trovata.
    find() si usa in genere in un ciclo while, vedi l'esempio che ho fatto oggi qui in un'altra discussione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Utente di HTML.it L'avatar di inc40
    Registrato dal
    Sep 2004
    Messaggi
    319
    Originariamente inviato da andbin
    find() si usa in genere in un ciclo while, vedi l'esempio che ho fatto oggi qui in un'altra discussione.
    Originariamente inviato da andbin
    find() si usa in genere in un ciclo while, vedi l'esempio che ho fatto oggi qui in un'altra discussione.
    Allora, ho scritto questo codice:

    codice:
    String str1 = "Questa è una UnAStringa uNa";
    String str2 = "\\buna\\b";
    Pattern p = Pattern.compile(str2, Pattern.CASE_INSENSITIVE);        
    Matcher m = p.matcher(str1);    
    
    int start = 0;
    String stringa_app = "";
    
    while (m.find(start)) {
             stringa_app = m.group();
             start = m.end();
             str1  = m.replaceFirst("<a href>" + stringa_app + "</a>");
        }
    ma non ottengo ciò che voglio, ossia ottenere link dove in str1 c'è la stringa 'una' e la stringa 'uNa'.
    Questo è ciò che ottengo:

    Questa è <a href>uNa</a> UnAStringa uNa

    Questo è ciò che vorrei ottenere:

    Questa è <a href>una</a> UnAStringa <a href>uNa</a>

    Gli uomini, non avendo potuto guarire la morte, la miseria, l'ignoranza, hanno risolto, per vivere felici, di non pensarci.

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.