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

    Dubbio su classe Scanner

    Se io ho un file di input cosě:

    codice:
    -nick AFONTANA -p 7570 ;
    -nick LRICCI -p 8674 -u 5643 ;
    E devo leggere le informazioni, come funziona Scanner?

    Dalla documentazione non ho capito molto.
    C'č il metodo haseNextLine() che restituisce true se il file ha ancora una linea da leggere, ma se io voglio memorizzare quello che leggo in una stringa, come faccio a indicare che quando trova uno spazio si deve fermare?
    ad esempio:

    codice:
    Scanner s=new Scanner........
    
    while(s.hasNext())
    {
       parola=s.next();
    }
    COsě mi arriverebbe per dire a leggere

    codice:
    -nick
    e poi si arresta?

    Cioč come faccio io a capire quando si ferma, se si blocca ad uno spazio e poi riprende o devo dirgli io di continuare...?
    Come faccio a leggere, fermarmi dove mi interessa e memorizzare e farlo ripartire?
    Sto avendo un' amnesia...

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    codice:
    import java.util.*;
    
    class ScannerExample {
      public static void main(String[] args) {
    	String str = "-nick AFONTANA -p 7570\n-nick LRICCI -p 8674 -u 5643";
    	Scanner scanner1 = new Scanner(str);
    	
    	String token="";
    	System.out.println("Scansione con lo scanner di default: ");
    	while(scanner1.hasNext()) {
    	  System.out.println(scanner1.next());
    	}
    	
    	Scanner scanner2 = new Scanner(str);
    	// Sono i delimitatori. Leggiti le regex
    	scanner2.useDelimiter("\n");
    	
    	System.out.println("\nScansione con un set di delimitatori: ");
    	while(scanner2.hasNext()) {
    	  System.out.println(scanner2.next());
    	}
      }
    }
    Scanner mette a disposizione dei metodi hasNextXXX(), che consentono di ottenere un risultato positivo (true) se ci sono token di quel tipo e false altrimenti.
    Li vedi tutti qui: http://download.oracle.com/javase/1....l/Scanner.html

    Qui: http://download.oracle.com/javase/1....gex.Pattern%29

    trovi invece i metodi per settare i delimitatori.. č possibile utilizzare Patterne o una stringa come ho fatto nell'esempio sopra con il secondo Scanner.

    Il delimitatore corrente, quando non specificato, č lo "spazio vuoto" e l'"a capo", quindi se non usi dei tuoi delimitatori sai che ogni token corrisponde ad uno spazio; in caso contrario avrai il tuo set di delimitatori.

    La lettura da un file č pressochč identica, la differenza č che al costruttore passerai il file/inputstream/readable..

  3. #3
    Si ok grazie, ma se per esempio io ho un elenco di persone come quello, come faccio in un programma per esempio a settare un oggetto in base a quello che leggo?
    CIoč dovrei dire a scanner, finchč non c'č lo spazio....leggi, e mi legge la scritta -nick, dopo si trova il nome della persona e gli dovrei dire finchč non trovi lo spazio leggi, e assegno il nome della persona, poi dico continua a leggere finchč non trovi spazio e mi leggerebbe "-p" e gli dovrei dire finchč......leggi.
    Cioč avrei una serie di while annidati bruttisimi...come possi fare ad evitarlo?
    Dovrei leggere di che tipo di informazione si tratta.
    -nick, oppure -p, oppure -a, che indicano cose diverse e dopo c'č il dato che mi serve, ma come faccio?

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Originariamente inviato da Darčios89
    Si ok grazie, ma se per esempio io ho un elenco di persone come quello, come faccio in un programma per esempio a settare un oggetto in base a quello che leggo?
    CIoč dovrei dire a scanner, finchč non c'č lo spazio....leggi, e mi legge la scritta -nick, dopo si trova il nome della persona e gli dovrei dire finchč non trovi lo spazio leggi, e assegno il nome della persona, poi dico continua a leggere finchč non trovi spazio e mi leggerebbe "-p" e gli dovrei dire finchč......leggi.
    Cioč avrei una serie di while annidati bruttisimi...come possi fare ad evitarlo?
    Dovrei leggere di che tipo di informazione si tratta.
    -nick, oppure -p, oppure -a, che indicano cose diverse e dopo c'č il dato che mi serve, ma come faccio?
    Tu vuoi leggere solo il nome della persona?

    In caso fosse cosě (e utilizzando un modo poco elegante), ti basterebbe leggere 2 token e poi uscire dal ciclo, salvando quindi il nome.

  5. #5
    No dovrei leggere tutte le informazioni presenti nella stringa, ma credo di avere risolto, perň mi sono servito della classe StringTokenizer, grazie, mi faccio sentire se ne ho bisogno

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.