Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Verificare che una stringa sia contenuta in un'altra stringa

    Ciao a tutti, devo fare questa operazione.

    Secondo voi mi conviene usare il metodo intern() o il metodo contains()?
    (non capisco bene le differenze).

    Per ora ho usato il metodo intern() così:

    codice:
    public boolean getProTurn(LODAnalysisInfo info) {
    		//invokeTimes++;
    		LogicalLink nextLink = info.getNextLink();
                    String nextLinkId = ('|'+(String)nextLink.toString()+'|').intern();
                    String proTurnId = nextLink.getUserData(userDataCategory).get(indexPRO_TURN).toString();
    
                    if(nextLinkId==proTurnId){
                        System.out.println("next LINK_ID: "+nextLinkId+" is prohibited");
                        return true;
                    }else
                        return false;
    }
    Grazie
    My website: .....:::{[( www.oltrecalcio.com )]}:::.....
    My works: .....:::{[( win.oltrecalcio.com/lavori )]}:::.....

    "PALLA TAGLIATA...MESSA FUORI...C'è PIRLO PIRLO...ANCORA PIRLO...DI TACCO...TIRO... GOOOOOOOOOOOOOOOOOL GRROSOOO GRROSOOO GRROSSOOO GOL DI GROSSOOOOOOOO..."

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

    Re: Verificare che una stringa sia contenuta in un'altra stringa

    Originariamente inviato da cristal
    Secondo voi mi conviene usare il metodo intern() o il metodo contains()?
    (non capisco bene le differenze).
    Sono 2 cose completamente diverse!!

    contains() verifica se effettivamente la sequenza di caratteri passata come argomento (che nota è in generale un CharSequence) è contenuta all'interno della stringa su cui è invocato. Quindi es. "pippo".contains("pp") restituisce true perché "pp" è contenuto in "pippo".


    intern() è per tutta un'altra cosa, riguarda i "reference". "internare" una stringa significa verificare (ed eventualmente inserire) se nel constant-pool esiste già quella stringa.

    L'esempio più banale che si può fare è:

    codice:
    class Prova {
        public static void main(String[] args) {
            if (args[0] == "ciao") {
                //.... fai qualcosa .....
            }
        }
    }
    Anche se tu lanciassi con:

    java Prova ciao

    NON si entrerà MAI in quel if perché "ciao" nel sorgente è una stringa "literal" con un suo reference nel constant-pool mentre la stringa passata come argomento è istanziata a runtime e quindi pur avendo la stessa sequenza di caratteri, è un oggetto diverso.

    Se invece si facesse:

    if (args[0].intern() == "ciao")

    allora intern() va a vedere se nel constant-pool c'è una stringa "ciao" (e c'è) e restituisce il reference ... che è appunto proprio lo stesso della stringa "literal" nel sorgente.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    ah capito....

    allora, in pratica io ho due stringhe.

    una è proTurnId che contiene:
    |12|14|16|

    un'altra è nextLinkId.

    Io devo verificare che quando nextLinkId è contenuto in proTurnId, allora devo restituire un false.
    es.
    nextLinkId=|14| è contenuto in proTurnId -> false;

    Quindi, se ho ben capito, devo usare il contains(), giusto?

    grazie....
    My website: .....:::{[( www.oltrecalcio.com )]}:::.....
    My works: .....:::{[( win.oltrecalcio.com/lavori )]}:::.....

    "PALLA TAGLIATA...MESSA FUORI...C'è PIRLO PIRLO...ANCORA PIRLO...DI TACCO...TIRO... GOOOOOOOOOOOOOOOOOL GRROSOOO GRROSOOO GRROSSOOO GOL DI GROSSOOOOOOOO..."

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da cristal
    una è proTurnId che contiene:
    |12|14|16|

    un'altra è nextLinkId.

    Io devo verificare che quando nextLinkId è contenuto in proTurnId, allora devo restituire un false.
    es.
    nextLinkId=|14| è contenuto in proTurnId -> false;

    Quindi, se ho ben capito, devo usare il contains(), giusto?
    Se la stringa di ricerca è proprio "|..numero..|" cioè con le barre verticali ai lati, è chiaro che se c'è il numero tra le barre nella stringa di input, lo trovi inequivocabilmente. Quindi contains() sarebbe appropriato.

    Se cercassi solo "14" non è detto che sia corretto (dipende dal criterio esatto).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    no, io metto le barre anche sulla stringa di ricerca....in pratica il codice l'ho modificato così:

    codice:
     public boolean getProTurn(LODAnalysisInfo info) {
    		//invokeTimes++;
    		LogicalLink nextLink = info.getNextLink();
                    String nextLinkId = ('|'+(String)nextLink.toString()+'|');
                    String proTurnId = nextLink.getUserData(userDataCategory).get(indexPRO_TURN).toString();
                  
                    if (proTurnId.contains(nextLinkId)){
                        System.out.println("next LINK_ID: "+nextLinkId+" is prohibited");
                        return false;
                    }else
                        return true;
            }
    come vedi in nextLinkId ci ho messo le barre ai lati oltre al valore all'interno...

    cosa ne pensi?

    grazie ancora...
    My website: .....:::{[( www.oltrecalcio.com )]}:::.....
    My works: .....:::{[( win.oltrecalcio.com/lavori )]}:::.....

    "PALLA TAGLIATA...MESSA FUORI...C'è PIRLO PIRLO...ANCORA PIRLO...DI TACCO...TIRO... GOOOOOOOOOOOOOOOOOL GRROSOOO GRROSOOO GRROSSOOO GOL DI GROSSOOOOOOOO..."

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da cristal
    no, io metto le barre anche sulla stringa di ricerca....
    Allora è sensato e corretto. Ammesso che nella stringa proTurnId ognuno dei numeri abbia sempre le barre ai lati (e da quanto hai detto è così), se cerchi |numero| e c'è allora inequivocabilmente lo trovi e solo quel numero.

    P.S. in

    String nextLinkId = ('|'+(String)nextLink.toString()+'|');

    Il cast (String) non serve, è inutile. E pure il toString() sarebbe inutile (la concatenazione delle stringhe invoca già toString() su un qualunque oggetto

    String nextLinkId = ('|'+nextLink+'|');
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  7. #7
    sì, in proTurnId, ogni numero ha le stanghette ai lati...

    Ah, io avevo fatto il cast perchè nextLink era un oggetto di tipo LogicalLink...

    quindi stai dicendo che il fatto di concatenarvi la stringa "|", mi trasforma già automaticamente l'oggetto LogicalLink in una stringa?
    My website: .....:::{[( www.oltrecalcio.com )]}:::.....
    My works: .....:::{[( win.oltrecalcio.com/lavori )]}:::.....

    "PALLA TAGLIATA...MESSA FUORI...C'è PIRLO PIRLO...ANCORA PIRLO...DI TACCO...TIRO... GOOOOOOOOOOOOOOOOOL GRROSOOO GRROSOOO GRROSSOOO GOL DI GROSSOOOOOOOO..."

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Originariamente inviato da cristal
    sì, in proTurnId, ogni numero ha le stanghette ai lati...

    Ah, io avevo fatto il cast perchè nextLink era un oggetto di tipo LogicalLink...

    quindi stai dicendo che il fatto di concatenarvi la stringa "|", mi trasforma già automaticamente l'oggetto LogicalLink in una stringa?
    Non "trasforma" di certo quel oggetto! Se fai

    '|'+nextLink+'|'

    viene invocato implicitamente toString() su quel oggetto LogicalLink e si ottiene quindi il String che verrà concatenato al resto. E ripeto: non è che trasforma .....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  9. #9
    mi sono espresso male con il termine trasforma, ma ho capito.....

    ti ringrazio tantissimo
    My website: .....:::{[( www.oltrecalcio.com )]}:::.....
    My works: .....:::{[( win.oltrecalcio.com/lavori )]}:::.....

    "PALLA TAGLIATA...MESSA FUORI...C'è PIRLO PIRLO...ANCORA PIRLO...DI TACCO...TIRO... GOOOOOOOOOOOOOOOOOL GRROSOOO GRROSOOO GRROSSOOO GOL DI GROSSOOOOOOOO..."

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 © 2024 vBulletin Solutions, Inc. All rights reserved.