DOMANDA Come implementare il comando Like sql in java

Pubblicità

Scripta14

Nuovo Utente
Messaggi
95
Reazioni
8
Punteggio
25
Buongiorno,

sto cercando di verificare il contenuto di una stringa tramite il metodo contains di java. Di questa stringa conosco l'inizio e obbligatoriamente la fine. Mi servirebbe trovare un modo su come verificare se tra l'inzio e e la fine di questa stringa sono presenti altri caratteri.
Esempio
Codice:
if(s.contains("<Prova>")) {
        System.out.println("Prova è contenuta in s ");
    }

In questo modo devo essere sicuro che in s avrò solo <Prova>. Qualora volessi estendere la mia verifica, considerando una ricerca del tipo <Prova pippo>, dove pippo è una informazione che non conosco, come posso fare in java.
SQL ha il comando LIKE, ma in java come posso verificare se la stringa contiene qualcosa in più di Prova?
Ho dato un'occhiata online e ho trovato siti dove utilizzano le regex, ma non mi hanno convinto molto.

Grazie a tutti per l'aiuto.
 
non vorrei dire una cazzata ma prova cosi, sono un pò arruginito col java

Java:
str.matches(expr);
 
Ammetto di non utilizzare molto le regex.

Intendi così:
Codice:
if(s.matches("<Prova "+"\\w+|\\W+"+">")) {
    
        System.out.println("s contiene Prova ");
    }
 
Grazie.
Funziona e non funziona. Se ho un stringa del tipo
Codice:
String s="<Allegati sdfsdf#$£@AAA>";

if(s.matches("<Allegati "+"(\\w+)(\\W+)"+">")) {
    
        System.out.println("s contiene allegati ");
    }
Funziona la regex.Mentre se ho la questa Stringa:
Codice:
 String s="<Allegati xmlns:ns2=\\\"http://www.w3.org/2000/09/xmldsig#\\\" xmlns:ns3=\\\"http://ivaservizi.agenziaentrate.gov.it/docs/xsd/fatture/v1.2\\\">"

if(s.matches("<Allegati "+"(\\w+)(\\W+)(\\d+)(\\s*)"+">")) {
    
        System.out.println("s contiene allegati ");
    }

Questa non funziona . Siccome non uso spesso le regex sono in alto mare.
 
Devi veramente controllare tutta la stringa? Non e' sufficente controllare la prima parte della stringa ossia if(s.contains("<Allegati"))

PS se quella stringa fa parte di un documento XML, puoi usare un XML parser che fa tutto lui...
 
Perché proprio contains? Se della stringa conosci l'inizio e devi verificarlo puoi usare startsWith();
se devi verificare che finisca con la parentesi angolare chiusa (il simbolo >) puoi usare endsWith();
e poi puoi usare length() per verificare se la lunghezza della stringa eccede la parte iniziale +1 (il simbolo finale >);
Per esempio s="<Prova>" ha lunghezza 7 ossia "<Prova" (6) e ">" (1)
invece "<Prova pippo>" ha lunghezza 13. Già la lunghezza insomma ti dice se c'è "altra roba" tra l'inizio "fisso" che conosci e la fine che è ">";
l'informazione in mezzo la estrai con il metodo substring a cui devi solo passare gli indici dei caratteri da estrarre
 
Grazie per la risposta. Ci avevo pensato, ma sfortunatamente la stringa è più lunga. Ho riportato solo la parte di stringa per mostrare cosa mi serviva fare. Prima e dopo ci sono altre parti della stringa.
Riporto una soluzione che sembrerebbe funzionare. L'ho testata più volte e mi ha sempre restituito quello che volevo.
Codice:
                 String pattern = "(.*)(\\d+)(.*)";
                 Pattern r = Pattern.compile(pattern);
                 Matcher m = r.matcher(str);
                 if(str.contains("<Allegati>")||m.find( ))
               {
                    System.out.println("contiene allegati");
                 else
              {
                   System.out.println("non contiene allegati");
               }
 
Beh, forse se tu avessi pubblicato tutta la stringa, completa, magari con piu' di un esempio, ti avremmo potuto aiutare di piu'.

Per esempio, nell'ultimo tuo esempio il test str.contains("<Allegati>") ritornera' sempre FALSE perche' la parola Allegati, dai pochi esempi che hai pubblicato, sembra essere preceduta a un < ma non e' mai seguita da un >
 
Figurati grazie lo stesso per l'interessamento. Non potevo pubblicare tutta la stringa per motivi di privacy perchè è parte di una fattura elettronica. Siccome da progetto si è voluta gestirla come una stringa, è uscita la necessità di aggiungere anche quel controllo.
Grazie ancora per l'aiuto.
 
Pubblicità
Pubblicità
Indietro
Top