DOMANDA Come implementare il comando Like sql in java

Scripta14

Nuovo Utente
95
8
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.
 

Skills07

Head of Development
Staff Forum
Utente Èlite
35,278
11,431
CPU
Ryzen 7 5800x
Dissipatore
Deepcool gammax l240 v2
Scheda Madre
Aourus Gigabyte X-470 ultra gaming
HDD
Samsung Evo 850 250gb ,2tb x 2 toshiba P300, 256 Ssd silicon power, Samsung evo plus 1tb nvme
RAM
32 gb G.Skill Tridentz 3200 mhz RGB
GPU
Zotac - RTX 3070 Ti Trinity OC
Monitor
ASUS TUF QHD 165hz IPS, ITEK GCF 165hz IPS QHD, Samsung Curvo 144hz QHD
PSU
Seasonic Focus 650w 80 platinum
Case
Coolermaster h500p
Periferiche
Asus Tuf Wireless
Net
Fibra Tim 100mb
OS
Windows 10 Pro 64 bit
non vorrei dire una cazzata ma prova cosi, sono un pò arruginito col java

Java:
str.matches(expr);
 

Scripta14

Nuovo Utente
95
8
Ammetto di non utilizzare molto le regex.

Intendi così:
Codice:
if(s.matches("<Prova "+"\\w+|\\W+"+">")) {
    
        System.out.println("s contiene Prova ");
    }
 

Skills07

Head of Development
Staff Forum
Utente Èlite
35,278
11,431
CPU
Ryzen 7 5800x
Dissipatore
Deepcool gammax l240 v2
Scheda Madre
Aourus Gigabyte X-470 ultra gaming
HDD
Samsung Evo 850 250gb ,2tb x 2 toshiba P300, 256 Ssd silicon power, Samsung evo plus 1tb nvme
RAM
32 gb G.Skill Tridentz 3200 mhz RGB
GPU
Zotac - RTX 3070 Ti Trinity OC
Monitor
ASUS TUF QHD 165hz IPS, ITEK GCF 165hz IPS QHD, Samsung Curvo 144hz QHD
PSU
Seasonic Focus 650w 80 platinum
Case
Coolermaster h500p
Periferiche
Asus Tuf Wireless
Net
Fibra Tim 100mb
OS
Windows 10 Pro 64 bit
si dovrebbe essere una cosa del genere
 

Scripta14

Nuovo Utente
95
8
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.
 

Skills07

Head of Development
Staff Forum
Utente Èlite
35,278
11,431
CPU
Ryzen 7 5800x
Dissipatore
Deepcool gammax l240 v2
Scheda Madre
Aourus Gigabyte X-470 ultra gaming
HDD
Samsung Evo 850 250gb ,2tb x 2 toshiba P300, 256 Ssd silicon power, Samsung evo plus 1tb nvme
RAM
32 gb G.Skill Tridentz 3200 mhz RGB
GPU
Zotac - RTX 3070 Ti Trinity OC
Monitor
ASUS TUF QHD 165hz IPS, ITEK GCF 165hz IPS QHD, Samsung Curvo 144hz QHD
PSU
Seasonic Focus 650w 80 platinum
Case
Coolermaster h500p
Periferiche
Asus Tuf Wireless
Net
Fibra Tim 100mb
OS
Windows 10 Pro 64 bit

Andretti60

Utente Èlite
6,440
5,091
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...
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,668
11,449
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
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
 
  • Mi piace
Reazioni: Andretti60

Scripta14

Nuovo Utente
95
8
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");
               }
 

Andretti60

Utente Èlite
6,440
5,091
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 >
 

Scripta14

Nuovo Utente
95
8
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.
 
  • Mi piace
Reazioni: Andretti60

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!