PDA

View Full Version : [Java] Ricerca all'interno di stringhe


Abdujaparov
09-12-2007, 11:38
Salve a tutti vorrei chiedervi se esiste un modo molto semplice per provare a trovare all'interno di una stringa alcune sottostringhe ad esempio, come faccio a verificare se in una stringa X sono contenute tutte le sottostringhe:
A="Pippo"
B="Orazio"
C="Clarabella"
considerando che prima di A, tra A e B, tra B e C e dopo C ci possa essere qualunque cosa?

Per esempio:
1)X="giuhihoijoPippo:bhiubuiubi:;huh?OrazioiniuClarabellauiun", questa mi deve venire riconosciuta

2)X="Pippo:bhiubuiubi:;huh?OrazioiniuClarabellauhhihi", questa riconosciuta

3)X="PippoOrazioClarabella", questa riconosciuta

4)X="giuhihoijoPippo:bhiubuiubi:;huh?Orazioiniuhuhuiiu", questa non riconosciuta

Grazie a tutti, ciao ciao.

carter100
09-12-2007, 12:09
Ma è un esercizio scolastico o per qualcosa che stai provando a fare tu?Un indexOf ti risolverebbe il problema se ho capito bene, in pratica se ti restituisce -1 la stringa non c'è, altrimenti c'è e passi alla prossima parola da cercare

HiroNakamura
09-12-2007, 13:02
Salve a tutti vorrei chiedervi se esiste un modo molto semplice per provare a trovare all'interno di una stringa alcune sottostringhe ad esempio, come faccio a verificare se in una stringa X sono contenute tutte le sottostringhe:
A="Pippo"
B="Orazio"
C="Clarabella"
considerando che prima di A, tra A e B, tra B e C e dopo C ci possa essere qualunque cosa?

Per esempio:
1)X="giuhihoijoPippo:bhiubuiubi:;huh?OrazioiniuClarabellauiun", questa mi deve venire riconosciuta

2)X="Pippo:bhiubuiubi:;huh?OrazioiniuClarabellauhhihi", questa riconosciuta

3)X="PippoOrazioClarabella", questa riconosciuta

4)X="giuhihoijoPippo:bhiubuiubi:;huh?Orazioiniuhuhuiiu", questa non riconosciuta

Grazie a tutti, ciao ciao.

Premessa...
Ti consiglio di salvarti tra i preferiti il link alla documentazione (API) per esempio questo (http://java.sun.com/javase/6/docs/api/java/lang/String.html#contains(java.lang.CharSequence)) per jdk 1.6...
In particolare a te interessa questo (http://java.sun.com/javase/6/docs/api/java/lang/String.html#contains(java.lang.CharSequence)) (il metodo "contains" dell'oggetto String).
Quindi per risponderti dovresti fare (o almeno io farei)
if (X.contains("Pippo") && X.contains("Orazio") && X.contains("Clarabella"))..
..(cose da fare in caso tutte e tre le parole debbano essere presenti...)

VICIUS
09-12-2007, 13:47
Probabilmente il metodo migliore è usare una espressione regolare. Questa per esempio da risultati corretti per tutte e quattro le stringhe.
^.*Pippo.+Orazio.+Clarabella.*$

ciao ;)

banryu79
09-12-2007, 15:49
Probabilmente il metodo migliore è usare una espressione regolare. Questa per esempio da risultati corretti per tutte e quattro le stringhe.
^.*Pippo.+Orazio.+Clarabella.*$

ciao ;)

Vicius scusa, te lo chiedo perchè sono ignorante in materia, ma quell'espressione che hai scritto te cos'è? PERL?

@EDIT:
Grazie della precisazione a tutti e due (TigerShark & Vicius) e del link
Scusate l'OT :)

^TiGeRShArK^
09-12-2007, 21:17
Vicius scusa, te lo chiedo perchè sono ignorante in materia, ma quell'espressione che hai scritto te cos'è? PERL?

No..
un'espressione regolare :fagiano:
http://java.sun.com/docs/books/tutorial/essential/regex/

VICIUS
09-12-2007, 22:46
Vicius scusa, te lo chiedo perchè sono ignorante in materia, ma quell'espressione che hai scritto te cos'è? PERL?
Una espressione regolare è una stringa scritta secondo una certa sintassi che permette di definire in modo conciso insiemi di stringhe. Perl ne fa largo uso ma non sono di certo la stessa cosa.

ciao ;)

Abdujaparov
10-12-2007, 21:12
Ciao a tutti, grazie mille per le risposte avevo pensato pure io alle espressioni regolari, in particolare:

^.* cosa indica?
.*$ e questo?

Il punto indica un punto o sta ad indicare altro?
Grazie mille, ciao ciao.

VICIUS
10-12-2007, 22:18
I simboli ^ e $ sono usati per indicare l'inizio e la fine della stringa. In questo caso il punto rappresenta ogni possibile carattere mentre * e + specificano la cardinalità dell'insieme. Entrambi permettono un numero infinito di lettere ma l'asterisco ammette anche l'insieme vuoto, quindi una stringa nulla, mentre con il più si escludono le stringhe vuote.

ciao ;)

Abdujaparov
11-12-2007, 10:58
Ciao quindi una stringa in questo modo:

^.*Pippo.*Orazio.*Clarabella.*$

indica che prima di pippo ci può essere qualunque cosa (da nulla a miliardi di caratteri) tra pippo ed orazio, tra orazio e clarabella e dopo clarabella stessa cosa?

Grazie mille, ciao ciao.