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

    [Java] String da splittare

    Ho un problema che come al solito non riesco a risolvere.

    Ho una String di 6 parole e circa 30 caratteri.

    Ho creato 5 JLabel per contenere il testo della String.

    Ora vorrei fare in modo di splittare questa Stringa in modo che una JLabel contenga SOLO parole intere, cioè senza andare a capo, e con un massimo di 10 caratteri per ogni JLabel.

    Faccio un esempio:

    String a = new String ("Chi non lavora non fa l'amore");

    Splittando verrebbe un Array di stringhe composto da 6 elementi

    sp[0] = Chi
    sp[1] = non
    sp[2] = lavora........

    Il risultato dovrebbe essere

    JLabel1 = "Chi non"
    JLabel2 = "lavora non"
    Jlabel3 = "fa l'amore"

    Come posso risolvere?

    Ho pensato di splittare innanzitutto la Stringa a seconda degli spazi

    String [] sp = a.split(" ");

    e di fare un controllo annidato con cicli for e if.

    Può essere una soluzione o c'è secondo voi una via più semplice?

  2. #2
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Non sono un esperto di regular expression e dovrei fare qualche prova per trovare una soluzione ad hoc...

    Intanto tieni presente che il metodo split riceve come parametro una regular expression.
    Poi vedi tu se ti basta il carattere ' ' oppure vuoi prendere ' ', \t, \n, ecc. come possibili delimitatori delle parole. Per capire meglio ciò di cui sto parlando dai una occhiata alla pagina Pattern in particolare penso che possa farti comodo il Predefined character classes \s

    a questo punto fare un ciclo di for per unire a due a due le parole mi sembra la soluzione più semplice... cosa sono 3-4 righe di codice?

    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

  3. #3
    La classe StringTokenizer (del package java.util) fornisce metodi per spezzare una stringa in tokens (cioè parole).
    A titolo di esempio un semplice programma che stampa le singole parole contenute in una frase:

    Codice PHP:
    [...]
        
    String aString "word1 word2 word3";
        
    StringTokenizer parser = new StringTokenizer(aString);
        while (
    parser.hasMoreTokens()) {
            
    System.out.println(parser.nextToken());
        }
    [...] 
    L'output sarà:
    Codice PHP:
    word1
    word2
    word3 
    Maggiori informazioni sulla classe le puoi reperire facilmente sul Web o in qualsiasi guida a Java
    Gutta cavat lapidem
    [La goccia scava la pietra]
    ***
    (Ovidio)

  4. #4
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    da StringTokenizer
    StringTokenizer is a legacy class that is retained for compatibility reasons although its use is discouraged in new code. It is recommended that anyone seeking this functionality use the split method of String or the java.util.regex package instead.
    "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
    Utente di HTML.it L'avatar di morphy79
    Registrato dal
    Jun 2004
    Messaggi
    1,568
    solo per te questa utilissima funzione hce ho realizzato, ti può tornare utile sicuramente..

    codice:
    /**
    	 * METODO PER MANDARE A CAPO UN TESTO TAGLIANDOLO AL PRIMO SPAZIO RILEVATO DA DESTRA
    	 * 
    
    	 * Il metodo retitisce la stringa suddivisa in più linee, senza troncare le parole, ripettando una lunghezza massima comune per ogni linea
    	 * @param lineaToWordWrap
    	 * stringa da suddividere in più linee
    	 * @param lenMax
    	 * lunghezza massima oltre la quale la linea viene mandata a capo, cercando di non tagliare le parole a metà
    	 * @return
    	 */
    	public static String setWordWrap(String lineaToWordWrap, int lenMax){
    		
    		String returnValue = "";
    		String ultimoCarattere = "";
    		int indiceWrap = 0;
    		int i = 0;
    		
    		// controllo se raggiunta lunghezza max
    		if (lineaToWordWrap.length()>lenMax){
    
    			// ciclo per l'intera lunghezza massima
    			for(i=0;i<lenMax;i++){
    				
    				// recupero nuovo indice
    				indiceWrap = lenMax-i;
    				
    				// recupera carattere al limite
    				ultimoCarattere = String.valueOf(lineaToWordWrap.charAt(indiceWrap));
    				
    				// se il carattere è uguale a spazio
    				if(ultimoCarattere.equals(" ")){
    					break;
    				}
    				
    			} // fine ciclo
    			
    			// controllo se raggiunto limite eseguo taglio anche se non ho trovato lo spazio
    			if(i==lenMax){
    				
    				// recupero linea al limite
    				returnValue = lineaToWordWrap.substring(0,lenMax).trim();
    				
    				// aggiungo la successiva riga limitata a sua volta
    				returnValue = returnValue + "\r\n" + setWordWrap(lineaToWordWrap.substring(lenMax).trim(), lenMax);
    				
    			}else{
    				
    				// recupero riga limitata
    				returnValue = lineaToWordWrap.substring(0,indiceWrap).trim();
    				
    				// aggiungo la successiva riga limitata a sua volta
    				returnValue = returnValue + "\r\n" + setWordWrap(lineaToWordWrap.substring(indiceWrap).trim(), lenMax);
    			}
    
    		}else{
    			
    			// ritorno la linea senza alcuna limitazione
    			returnValue = lineaToWordWrap;
    			
    		} // fine controllo se raggiunta lunghezza max
    		
    		return returnValue;
    			
    	}
    odio chi parla di politica..
    anzi vorrei fondare un partito contro tutto ciò

  6. #6
    Beh il libro da cui studiai Java risale a 4 anni fa...mi dovrei aggiornare un pochetto
    Gutta cavat lapidem
    [La goccia scava la pietra]
    ***
    (Ovidio)

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