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.
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.
cosi' se non ci sono abbastanza caratteri non fa nulla, altrimenticodice:String s = "ABCABC"; try { //tua operazione con substing s.substring (2, 10); } catch (IndexOutOfBoundsException ex) {}
cosi' se la stringa e' troppo corta prendi la sottostringa da 2 fino alla fine.codice:String s = "ABCABC"; try { //tua operazione con substing s.substring (2, 10); } catch (IndexOutOfBoundsException ex) { s.substring (2, s.length()); }
Grazie mille, che bischero, l'avevo gia fatto su altri programmi
![]()
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...
o meglio ancora:codice:if (s.length()>=10) { ... s.substring (2, 10); } else { ... s.substring (2, s.length()); }
e per i fanatici del codice compressocodice:int length = s.length(); if (length>10) length = 10; s.substring(2, length);
aspetta.. forse si può fare di meglio...codice:int length = s.length() > 10 ? 10 : s.length(); s.substring(2, length);
Non è nel mio stile, ma dovrebbe compilare...codice:s.substring(2, s.length() > 10 ? 10 : s.length());
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
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 )
Spero di essere stato d'aiuto.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)); } }
G
Giulio
http://www.wikijava.org
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.
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
Giulio
http://www.wikijava.org
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![]()
Ma dai! E' l'unico operatore ternario di Java! Merita tutta la tua attenzione!quella complicata con i due punti non me la ricordo mai
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
eheheh... anche io.L'ho cancellato più volte di quante lo abbia usato.. però è carino..
Giulio
http://www.wikijava.org