Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 33
  1. #1

    [JAVA] Ricerca di un carattere in una stringa

    Ciao a tutti!!
    Sto cercando di sviluppare un modo per "girare" le date, quindi se è in formato dd/mm/yyyy deve diventare yyyy/mm/dd.. non conoscendo metodi alternativi volevo cercare il primo "/" della stringa in modo da sapere come poter fare a risolvere questo problema tramite substring, però non so come cercare un certo carattere in una stringa, qualcuno ne conosce il modo?
    Vi ringrazio!!
    Gato

  2. #2
    Usa il SimpleDateFormat che ti permette di fare tutte le conversioni che vuoi in un attimo.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Ciao satifal, grazie per la risposta!!
    Si, hai ragione! Il guaio è questo, posto il codice e te lo spiego:
    codice:
    import java.text.SimpleDateFormat;
    
    import java.awt.event.ActionListener;
    import java.awt.event.ActionEvent;
    
    import javax.swing.*;
    import java.awt.*;
    
    import java.util.*;
    import java.util.Calendar;
    
    public class myCalendar2 extends JApplet {
        private static final long serialVersionUID = 1L;
    
        JButton[] bottone;
        JPanel pannelloBottoni;
        JPanel pannelloCampi;
        Container pannelloApplet;
    
        public JTextField ggStart = new JTextField(10);
        public JTextField mmStart = new JTextField(10);
        public JTextField yyStart = new JTextField(10);
    
        public JTextField ggEnd = new JTextField(10);
        public JTextField mmEnd = new JTextField(10);
        public JTextField yyEnd = new JTextField(10);
    
    //	Labels della data iniziale
        public JLabel gS = new JLabel("Giorno iniziale:");
        public JLabel mS = new JLabel("Mese iniziale:");
        public JLabel yS = new JLabel("Anno iniziale:");
    
    //	Labels della data finale
        public JLabel gE = new JLabel("Giorno finale:");
        public JLabel mE = new JLabel("Mese finale:");
        public JLabel yE = new JLabel("Anno finale:");
    
    //	Label TestoOutput
        public JLabel Output = new JLabel("Risultato:");
        public JTextArea testoOutput = new JTextArea();
    
        public void init() {
    
    //   Settaggio testo
    	testoOutput.setEditable(false);
    	testoOutput.setText("Inserire i dati");	
    
    	// Definisco il layout dell'applet: 
    
    	pannelloApplet = getContentPane();
    	pannelloApplet.setLayout(new BorderLayout());
    
    	// inseriremo i 6 bottoni non direttamente dell'applet, 
    	// ma in un pannello che verra' inserito nel centro dell'
    	// applet. Costruiamo il pannello: 
    
    	pannelloBottoni = new JPanel();
    
    	// dispongo i 6 bottoni in una griglia 3 x 2:
    	pannelloBottoni.setLayout(new GridLayout(3, 2));
    	// definisco il colore di fondo del pannelloBottoni:
    	pannelloBottoni.setBackground(Color.black);
    
    	// definisco un array di 6 bottoni.
    	bottone = new JButton[9];
    
    	// inizializzo i 6 bottoni e li aggiungo al pannelloBottoni.
    	// Etichetta dei bottoni:
    	String[] nomeBottone = {"Componi data", "Data corrente", "Controllo data", 
    				"Aggiungi tempo", "Anno bisestile", "Settimana del mese corrente",
    				"Settimana dell'anno corrente", "Giorno dell'anno", "bott. 9"};
    
    	// Colore di sfondo dei bottoni: 
    	Color[] coloreBottone = {Color.red, Color.white, Color.yellow,
    				 Color.cyan, Color.green, Color.magenta,
    				Color.red, Color.white, Color.yellow};
    
    	for (int i = 0; i < bottone.length; i++) {
    	    bottone[i] = new JButton(nomeBottone[i]);
    	    bottone[i].setBackground(coloreBottone[i]);
    	    pannelloBottoni.add(bottone[i]);}
    
    	// inserisco il pannelloBottoni a sud dell'applet: 
    	pannelloApplet.add(pannelloBottoni, BorderLayout.SOUTH);
    
    //	Definisco il pannello e i campi d'Input che dovrà contenere:
    	JPanel pannelloCampi = new JPanel();
    	pannelloCampi.setLayout(new GridLayout(2,6,0,0));
    
    //	Inserisco in pannelloCampi la data iniziale, quella finale ed il testo di output:
    //   Data START
    	pannelloCampi.add(gS);
    	pannelloCampi.add(ggStart);
    
    	pannelloCampi.add(mS);
    	pannelloCampi.add(mmStart);
    
    	pannelloCampi.add(yS);
    	pannelloCampi.add(yyStart);
    
    //   Data END
    	pannelloCampi.add(gE);
    	pannelloCampi.add(ggEnd);
    
    	pannelloCampi.add(mE);
    	pannelloCampi.add(mmEnd);
    
    	pannelloCampi.add(yE);
    	pannelloCampi.add(yyEnd);
    
    	// inserisco il pannelloCampi a nord dell'applet:
    	pannelloApplet.add(pannelloCampi, BorderLayout.NORTH);
    
    //	Definisco il pannello e gli Item che dovrà contenere:
    	JPanel pannelloOut = new JPanel();
    	pannelloOut.setLayout(new FlowLayout());
    
    //   OutPut
    	pannelloOut.add(Output);
    	pannelloOut.add(testoOutput);
    
    	pannelloApplet.add(pannelloOut, BorderLayout.CENTER);
    
    	Receiver1 receiver1 = new Receiver1();
    	Receiver2 receiver2 = new Receiver2();	//	ActionListener(s) 
    	Receiver3 receiver3 = new Receiver3();	//- da implementare dopo questa classe -
    	Receiver4 receiver4 = new Receiver4();
    	Receiver5 receiver5 = new Receiver5();
    	Receiver6 receiver6 = new Receiver6();
    	Receiver7 receiver7 = new Receiver7();
    	Receiver8 receiver8 = new Receiver8();
    
    	//		assegnazione ActionListener(s) ai corrispondenti JButton(s)	assegnazione ActionListener(s) ai corrispondenti JButton(s)
    	bottone[0].addActionListener(receiver1);
    	bottone[1].addActionListener(receiver2);
    	bottone[2].addActionListener(receiver3);
    	bottone[3].addActionListener(receiver4);
    	bottone[4].addActionListener(receiver5);
    	bottone[5].addActionListener(receiver6);
    	bottone[6].addActionListener(receiver7);
    	bottone[7].addActionListener(receiver8);
    	}
    
        // la classe che definisce il ricevitore di eventi usato 
        // dal bottone Componi data:
        class Receiver1 implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
    
    	String giorno = ggStart.getText ();
    	String mese = mmStart.getText ();
    	String anno = yyStart.getText ();
    
    	testoOutput.setText(giorno + "/" + mese + "/" + anno + "<--------->" + anno + "/" + mese + "/" + giorno);
    		}
    	}
    
        // la classe che definisce il ricevitore di eventi usato 
        // dal bottone :
        class Receiver2 implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
    
    	Calendar cal = new GregorianCalendar();
    
    	SimpleDateFormat sdf = new SimpleDateFormat("EEEE d MMM yyyy", Locale.ITALY);
    	Date now = new Date();
    
    	testoOutput.setText(sdf.format(now) + " = " + cal.get(Calendar.DAY_OF_MONTH) + "/" + (cal.get(Calendar.MONTH)+1) + "/" + cal.get(Calendar.YEAR));
    //	testoOutput.setText();
    		}
    	}
    
        // la classe che definisce il ricevitore di eventi usato 
        // dal bottone Controllo data:
        class Receiver3 implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
    
    	String SGiorno = ggStart.getText ();
    	String SMese = mmStart.getText ();
    	String SAnno = yyStart.getText ();
    
    //Dichiarazione day, month, year:
    	int day = 0;
    	int month = 0;
    	int year = 0;
    
    	 try {
    //Parsing (all'interno del blocco try):
    	day = Integer.parseInt(SGiorno);
    	month = Integer.parseInt(SMese);
    	year = Integer.parseInt(SAnno);
    
            GregorianCalendar cal = new GregorianCalendar (year, month-1, day);
            cal.setLenient (false);
    
    //Le stringhe sono oggetti "immutabili". Non esiste un metodo setText()
    // né esiste un qualche altro metodo che modifica lo stato dell'oggetto String.
    	cal.get (Calendar.DATE);
    	      testoOutput.setText(cal.get(Calendar.DAY_OF_WEEK) + day +"/"+ month +"/"+ year + ": data corretta.");
    
    	} catch (NumberFormatException n) {
    		testoOutput.setText("Per eseguire il comando \"Controllo data\" \n accertarsi che i campi Giorno, Mese e Anni iniziale siano valorizzati con cifre da 0 a 9.");
    
    		} catch (IllegalArgumentException i) {
    		      testoOutput.setText(day +"/"+ month +"/"+ year + ": data errata.");
    	}
          }
        }
    
        // la classe che definisce il ricevitore di eventi usato 
        // dal bottone Aggiungi tempo:
        class Receiver4 implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
    
    	String SGiorno = ggStart.getText ();
    	String SMese = mmStart.getText ();
    	String SAnno = yyStart.getText ();
    
    	String EGiorno = ggEnd.getText ();
    	String EMese = mmEnd.getText ();
    	String EAnno = yyEnd.getText ();
    
    	 try {
    //Parsing:
    	int day = Integer.parseInt(SGiorno);
    	int month = Integer.parseInt(SMese);
    	int year = Integer.parseInt(SAnno);
    
    //Tempo da aggiungere
    	int Agg = Integer.parseInt(EGiorno);
    	int Amm = Integer.parseInt(EMese);
    	int Ayy = Integer.parseInt(EAnno);
    
            GregorianCalendar cal = new GregorianCalendar (year, month, day);
            cal.setLenient (true);
    
    //Aggiunte
    
    	cal.add(Calendar.DAY_OF_MONTH, Agg);
    	cal.add(Calendar.MONTH, Amm);
    	cal.add(Calendar.YEAR, Ayy);
    
    	testoOutput.setText(cal.get(Calendar.YEAR) + "/" + cal.get(Calendar.MONTH) + "/" + cal.get(Calendar.DAY_OF_MONTH));
    
    	} catch (NumberFormatException n) {
    		testoOutput.setText("Per eseguire il comando \"Aggiungi tempo\" \n accertarsi che ogni campo di input sia valorizzato con almeno una cifra da 0 a 9 \n (quindi la data iniziale DEVE essere del tutto valorizzata,e \n se si vogliono aggiungere solo giorni, i campi mese ed anno devono essere a 0).");
    			}
    		}
    	}
    
        // la classe che definisce il ricevitore di eventi usato 
        // dal bottone Controllo data:
        class Receiver5 implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
    
    //Riprendo la strinda di input
    	String SAnno = yyStart.getText ();
    
    //Parsing
    	int year = Integer.parseInt(SAnno);
    	int r4 = 0;
    	int r100 = 0;
    	int r400 = 0;
    //Prove
    	r4 = year % 4;
    	r100 = year % 100;
    	r400 = year % 400;
    
    //Bisestile o normale:
    
    	if (r400 == 0){
    	testoOutput.setText(year + ": divisibile per 400, bisestile (366 giorni).");
    			}
    
    	if (r100 == 0 && r400 != 0){
    	testoOutput.setText(year + ": divisibile per 100 ma non per 400, non bisestile (365 giorni).");
    			}
    
    	if (r4 == 0 && r100 != 0){
    	testoOutput.setText(year + ": divisibile per 4 ma non per 100, bisestile (366 giorni).");
    			}
    
    	if (r4 != 0){
    	testoOutput.setText(year + ": non divisibile per 4, non bisestile (365 giorni).");
    			}
    		}
    	}
    
        // la classe che definisce il ricevitore di eventi usato 
        // dal bottone :
        class Receiver6 implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
    
    	String SGiorno = ggStart.getText ();
    	String SMese = mmStart.getText ();
    	String SAnno = yyStart.getText ();
    
    //Parsing:
    	int day = Integer.parseInt(SGiorno);
    	int month = Integer.parseInt(SMese);
    	int year = Integer.parseInt(SAnno);
    
            GregorianCalendar cal = new GregorianCalendar (year, month-1, day);
    	testoOutput.setText("Settimana corrente del mese: " + cal.get (Calendar.WEEK_OF_MONTH) + "°");
    		}
    	}
    
        class Receiver7 implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
    	String SGiorno = ggStart.getText ();
    	String SMese = mmStart.getText ();
    	String SAnno = yyStart.getText ();
    
    //Parsing:
    	int day = Integer.parseInt(SGiorno);
    	int month = Integer.parseInt(SMese);
    	int year = Integer.parseInt(SAnno);
    
            GregorianCalendar cal = new GregorianCalendar (year, month-1, day);
    	testoOutput.setText("Settimana corrente dell'anno: " + cal.get (Calendar.WEEK_OF_YEAR) + "°"); 
    		}
    	}
    
        class Receiver8 implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
    	String SGiorno = ggStart.getText ();
    	String SMese = mmStart.getText ();
    	String SAnno = yyStart.getText ();
    
    //Parsing:
    	int day = Integer.parseInt(SGiorno);
    	int month = Integer.parseInt(SMese);
    	int year = Integer.parseInt(SAnno);
    
            GregorianCalendar cal = new GregorianCalendar (year, month-1, day);
    	testoOutput.setText("Giorno dell'anno: " + cal.get (Calendar.DAY_OF_YEAR) + "°"); 
    		}
    	}
        class Receiver8 implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
    	String SGiorno = ggStart.getText ();
    	String SMese = mmStart.getText ();
    	String SAnno = yyStart.getText ();
    
    //Parsing:
    	int day = Integer.parseInt(SGiorno);
    	int month = Integer.parseInt(SMese);
    	int year = Integer.parseInt(SAnno);
    
    	SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    	SimpleDateFormat fds = new SimpleDateFormat("yyyy/MM/dd");
    		}
    	}
    }
    Ho tre campi DA CUI "tiro fuori" la stringa, ma anche dichiarandomi 2 SimpleDateFormat per effettuare le conversioni come ho fatto qui sopra, la prima volta che clicko la stringa è vuota quindi non ha niente da convertire e in quel caso vorrei mettere in output la data nel seguente formato: yyyy/MM/dd.
    Poi, ri-cliccando sullo stesso JButton,dovrei fare dei controlli per "vedere" in che formato è la data e girarla in qualsiasi caso,quindi:
    -controllo se è presente una data in un qualsiasi formato;
    -se non c'è la recupero dai campi in input e la schiaffo in output in formato yyyy/MM/dd;
    -se invece c'è la giro.
    Ma per fare così dovrei iniziare in questo modo:
    codice:
        class Receiver8 implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
    	String SGiorno = ggStart.getText ();
    	String SMese = mmStart.getText ();
    	String SAnno = yyStart.getText ();
    
    //Parsing:
    	int day = Integer.parseInt(SGiorno);
    	int month = Integer.parseInt(SMese);
    	int year = Integer.parseInt(SAnno);
    
    	SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    	SimpleDateFormat fds = new SimpleDateFormat("yyyy/MM/dd");
    
    	if(Data = null){
    		Data = new Date();
    e credo che sia errato, perchè Data viene controllata per la prima volta quando ancora devo eseguire
    codice:
    Data = new Date();
    Giusto? O ho sbagliato qualcosa nel ragionamento?
    Scusa,magari prima mi ero espresso male...
    Gato

  4. #4
    Intanto ho provato acambiare il codice, e ho scritto così:
    codice:
        class Receiver9 implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
    	String SGiorno = ggStart.getText ();
    	String SMese = mmStart.getText ();
    	String SAnno = yyStart.getText ();
    
    	String date = SAnno + SMese + SGiorno;	//19861218
    
    //Parsing:
    	int dataInt = Integer.parseInt(date);
    
    	Data = new Date(dataInt);
    
    	SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    	SimpleDateFormat fds = new SimpleDateFormat("yyyy/MM/dd");
    
    		testoOutput.setText(sdf.format(Data)+fds.format(Data));
    
    		}
    	}
    }
    però il compilatore dice che non può risolvere Data = new Date(dataInt) e non capisco perchè, qualcuno ne capisce qualcosa? :master:
    Gato

  5. #5
    Data va cambiato in Date (e non a)
    e poi mi sa che l'oggetto Date non prende nel costrutto un intero...
    mmmmm accetta un long (tempo in millisecondi, te lo puoi ricavare col timestamp)
    oppure altri costruttori con interi ma mi sa che sono deprecati.
    SCJP 96%

    Sono io signore che non ti perdono,io non merito punizioni, io sono potentissimo e ora che ho visto il tuo volto merito di stare in un cielo alto più alto del tuo perché non capendo chi è l’uomo hai dimostrato di essermi inferiore,tu servirai me. Da oggi mi chiamerò Satan che significa l’Avversario.

  6. #6
    maronna mia ho dato uno sgurado al codice e mmmmmm sorry ma non si capisce niente :-P...
    sarà h ieri sera ho fatto tardi..
    qual'è il tuo scopo? che devi fare? un calendario???
    SCJP 96%

    Sono io signore che non ti perdono,io non merito punizioni, io sono potentissimo e ora che ho visto il tuo volto merito di stare in un cielo alto più alto del tuo perché non capendo chi è l’uomo hai dimostrato di essermi inferiore,tu servirai me. Da oggi mi chiamerò Satan che significa l’Avversario.

  7. #7
    Grazie per la risposta morpheus4java!!

    Magari non hai fatto tardi ieri sera, hai solo a che fare con un neonato (cioè io)...

    l'output grafico è formato da 6 campi di input: giorno-mese-anno iniziali e finali, e una serie di JButton(9).
    Ciò che devo fare è Immettere in giorno-mese-anno iniziali una data, che poi verrà visualizzata come output nei 2 formati yyyy/MM/dd e dd/MM/yyyy...solo che mi son un pò incasinato, ora son arrivato a questo punto:
    codice:
        class Receiver9 implements ActionListener {
    	public void actionPerformed(ActionEvent e) {
    	String SGiorno = ggStart.getText ();
    	String SMese = mmStart.getText ();
    	String SAnno = yyStart.getText ();
    
    	String date = SAnno + SMese + SGiorno;	//19861218
    
    	SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
    	SimpleDateFormat fds = new SimpleDateFormat("yyyy/MM/dd");
    
    //Parsing:
    	try {
    	Date data = (sdf.parse(date) );
    
    		testoOutput.setText(sdf.format(data)+fds.format(data));
    
    	} catch (ParseException n) {
    		testoOutput.setText("Per eseguire il comando \"Giradata\" \n accertarsi che ogni campo di input sia valorizzato \n con almeno una cifra da 0 a 9 \n (quindi la data iniziale DEVE essere del tutto valorizzata.");
    			}
    		}
    però qualsiasi stringa immetta nei campi viene lanciata la ParseException, non capisco perchè..
    Gato

  8. #8
    scusami ma non mi tornano i conti
    riepilogando :

    hai ([] sono le text - (_______) sono i button )
    - data dal con gg [ ] mm [ ] aaa [ ]
    - data al con gg [ ] mm [ ] aaa [ ]

    e poi hai
    - (_______) button1
    -(_______) button2
    -(_______) button3
    -(_______) button4
    -(_______) button5
    -(_______) button6
    -(_______) button7
    -(_______) button8
    -(_______) button9
    ok?
    andiamo avanti, io utente ot inserisco le date e premo i bottoni? se si cosa dovrei aspettarmi?
    SCJP 96%

    Sono io signore che non ti perdono,io non merito punizioni, io sono potentissimo e ora che ho visto il tuo volto merito di stare in un cielo alto più alto del tuo perché non capendo chi è l’uomo hai dimostrato di essermi inferiore,tu servirai me. Da oggi mi chiamerò Satan che significa l’Avversario.

  9. #9
    codice:
    	// Etichetta dei bottoni:
    	String[] nomeBottone = {"Componi data", "Data corrente", "Controllo data", 
    				"Aggiungi tempo", "Anno bisestile", "Settimana del mese corrente",
    				"Settimana dell'anno corrente", "Giorno dell'anno", "bott. 9"};
    il primo "compone" la data (esempio,inseriamo nei campi giorno iniziale=18-mese iniziale=12-anno iniziale=1986 e nel campo di output viene fuori scritta la data dritta e rovescia)
    il secondo scrive in output la data corrente;
    il 3 controlla che la data sia reale;
    il 4 aggiunge il tempo scritto nella data finale(gg,mm,aaaa denominati come finali)alla data iniziale ( giorno iniziale=18-mese iniziale=10-anno iniziale=2010);
    il 5 controlla se l'anno è bisestile;
    il6 e il 7 dicono che settimana è (nel mese o nell'anno)
    l'8 dice che giorno dell'anno è;
    il 9 servirebbe a visualizzare le date nei due formati yyyy/mm/dd e dd/mm/yyyy;
    ed il 9 è il mio problema...
    spero di essermi spiegato bene scusa...
    Gato

  10. #10
    Però la discussione ha preso una piega completamente diversa dal titolo ...come si fa a cambiarlo?!?
    o dici che sia meglio aprire una nuova discussione?
    Gato

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.