Visualizzazione dei risultati da 1 a 10 su 10

Discussione: sottostringhe in java

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    278

    sottostringhe in java

    Mi chiedevo come posso prendere un certo numero di caratteri di una stringa senza che ottengaun eccezione se qualche stringa non ha un numkero sufficuentyemente elevato di caratteri. Vi ringrazio se qualcuno mi dice qualcosa su come si fa.

  2. #2
    codice:
    String s = "ABCABC";
    try {
    //tua operazione con substing
    s.substring (2, 10);
    }
    catch (IndexOutOfBoundsException ex)
    {}
    cosi' se non ci sono abbastanza caratteri non fa nulla, altrimenti

    codice:
    String s = "ABCABC";
    try {
    //tua operazione con substing
    s.substring (2, 10);
    }
    catch (IndexOutOfBoundsException ex)
    {
    s.substring (2, s.length());
    }
    cosi' se la stringa e' troppo corta prendi la sottostringa da 2 fino alla fine.
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    278
    Grazie mille , che bischero, l'avevo gia fatto su altri programmi

  4. #4
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Inviato da mxa
    String s = "ABCABC";
    try {
    //tua operazione con substing
    s.substring (2, 10);
    }
    catch (IndexOutOfBoundsException ex)
    {
    s.substring (2, s.length());
    }
    Non credo che le eccezioni si debbano usare per gestire questo genere di cose...

    codice:
    if (s.length()>=10)
    {
      ... s.substring (2, 10);
    }
    else
    {
      ... s.substring (2, s.length());
    }
    o meglio ancora:

    codice:
    int length = s.length();
    if (length>10)
      length = 10;
    s.substring(2, length);
    e per i fanatici del codice compresso

    codice:
    int length = s.length() > 10 ? 10 : s.length();
    s.substring(2, length);
    aspetta.. forse si può fare di meglio...
    codice:
    s.substring(2, s.length() > 10 ? 10 : s.length());
    Non è nel mio stile, ma dovrebbe compilare...

    Il meccanismo delle eccezioni è molto più lento di un semplice if, e se l'eccezione deve essere ammazzata, è meglio prevenirla. La teoria prevede che le eccezioni vengano lanciate quando l'algoritmo non è in grado di continuare il suo normale flusso di lavoro, ma nel caso specifico non mi sembra il caso.. Ciao
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  5. #5
    Se la tua stringa deriva da un input dell'utente, che va validato io preferirei non usare le eccezioni, in genere è meglio usare le eccezioni per catturare situazioni anomale che non dovrebbero mai accadere, mentre che una stringa inserita da un utente non corrisponda a ciò che ci si aspetta (non sia valida) è una situazione normale che è meglio gestire tramite clausole if.

    Il processo di controllo se l'input è corretto si chiama validazione.

    Questo semplice programmino fa quello che chiedevi, senza usare eccezioni.
    (il codice è pubblicato anche qui )
    codice:
    public class SubString {
    
        public static void main(String[] args) {
    	if (args.length < 3) {
    	    System.err.println("usage: SubString <string> <start> <end>");
    	    return;
    	}
    
    	String string = args[0];
    	int start = Integer.parseInt(args[1]);
    	int end = Integer.parseInt(args[2]);
    
    	// switch start & end if misordered.
    	if (start > end) {
    	    int mid = start;
    	    start = end;
    	    end = mid;
    	}
    
    	// check if any of the parameters are out of range
    	if (end > string.length()) {
    	    end = string.length();
    	}
    
    	if (start > string.length()) {
    	    start = string.length();
    	}
    
            //output the result
    	System.out.println(string.substring(start, end));
    
        }
    
    }
    Spero di essere stato d'aiuto.

    G

  6. #6
    Secondo me dipende:
    -se il fatto che la stringa non abbia un sufficiente numero di caratteri e' una condizione anomala e' giusto che l'eccezione venga lanciata e gestita
    -se deriva dall'input dell'utente allora e' giusto il meccanismo di validazione.
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  7. #7
    Sono d'accordo che ci siano situazioni in cui l'eccezione è la scelta giusta, però è anche bene cercare di limitarne l'uso per quanto possibile, xchè riducono la leggibilità del codice e alla fine possono dare più problemi di quelli che risolvono.
    Come regola uso proprio questa:
    Se la situazione anomala è causata da una condizione che avviene normalmente, per esempio cade una connessione TCP/IP o un utente digita un indirizzo email senza chiocciola... allora non è da eccezione.
    Mentre in caso contrario lo è, per esempio si provano a mandare dati sulla connessione TCP/IP che è caduta, oppure si prova a salvare un indirizzo email senza chiocciola.

    In situazioni come questi due esempi diventa chiara la necessità di validare gli input e di controllare le risorse prima di usarle.

    Alla fine sono concetti un po astratti e sembrano dettagli ininfluenti su programmi così minuscoli. Ma quando si cresce di dimensioni questi problemi diventano ovvi, e gestirli male può generare bugs da incubo. Parlo per esperienza ovviamente.

    Giulio

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    278
    Vanno bene tutti i metodi che avete postato, anche quello delle eccezioni, io personalmente ho usato il secondo metodo che avete postato, quella complicata con i due punti non me la ricordo mai

  9. #9
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    quella complicata con i due punti non me la ricordo mai
    Ma dai! E' l'unico operatore ternario di Java! Merita tutta la tua attenzione!

    E poi non è altro che un if else compresso:

    condizione ? faiSeVero : faiSeFalso;

    L'ho cancellato più volte di quante lo abbia usato.. però è carino..

    Ciao!
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  10. #10
    L'ho cancellato più volte di quante lo abbia usato.. però è carino..
    eheheh... anche io.

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