Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    12

    java: trasformare le parole di un file di lettura

    ciao a tutti!!!
    mi sono incastrato in un esercizio di java sui file di lettura e scrittura...l'esercizio sarebbe dato un file.txt leggere il contenuto e cambiare l'interno delle parole più grandi di tre lettere cioè lasciare la prima e l'ultima parola e mischiare le lettere rimanenti.es: gatto=gtato.
    Il testo è il seguente:

    "Secondo una ricerca dell’Università di Cambridge non importa l’ordine delle lettere in una parola, l’unica cosa che conta è che la prima e l’ultima lettera siano al posto giusto. Tutte le altre lettere della parola possono essere invertite senza creare problemi alla lettura."
    e dovrebbe convertirsi più o meno in questo:

    Sceodno una rcircea dlel’Uvitrisenà di Cmbairgde non ipromta l’odirne dlele lrteete in una proala, l’uicna csoa che cntoa è che la pimra e l’utlmia ltetrea saino al psoto gusito. Ttute le atlre lrteete dlela poalra psonoso esrsee itinvtere snzea carere prleobmi alla letutra.

    io ho lo vorrei inserire qua dentro:

    codice:
    public static void main(String[] args) {
            String nativeLF = UIManager.getSystemLookAndFeelClassName();
            try {
                UIManager.setLookAndFeel(nativeLF);
            } catch (Exception e) {
            }
            JFileChooser selector = new JFileChooser();
            selector.setFileSelectionMode(JFileChooser.FILES_ONLY);
            int ok = selector.showOpenDialog(null);
            if (ok != JFileChooser.APPROVE_OPTION) {
                JOptionPane.showMessageDialog(null, "ciao, alla prossima");
            } else {
                File fitxerEntrada = selector.getSelectedFile();
                String parola = null;
                try {
                    Scanner entra = new Scanner(fitxerEntra);
                    parola = entra.next();
                    System.out.println("Prima parola=" + parola);
                } catch (FileNotFoundException e) {
                    System.out.println("file non trovato");
                }
                JFileChooser selector2 = new JFileChooser();
                int ok2 = selector2.showSaveDialog(null);
                if (ok2 != JFileChooser.APPROVE_OPTION) {
                    JOptionPane.showMessageDialog(null, "ciao. alla prossima");
                } else {
                    File fitxerEsci = selector2.getSelectedFile();
                    try {
                        PrintWriter pw = new PrintWriter(new FileWriter(fitxerEsci, true));
                        pw.println(parola);
                        pw.println("funzione que mi converta il testo");//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                        pw.close();
                    } catch (IOException e) {
                        System.out.println("Problemes d'E/S");
                    }
                }
            }
        }
    }
    un pò laborioso...però il tema è trovare la funzione che separa le parole e cambia il suo interno. Io ho provato con:

    codice:
    try {
                BufferedReader leer = new BufferedReader(new FileReader(archivo));
                while ((s = leer.readLine()) != null) {
       
                    StringTokenizer st = new StringTokenizer(s);
                  st.countTokens();
                    while (st.hasMoreElements()) { 
                        parola = st.nextToken();
                      }   }
                leer.close();
            } catch (IOException e) {
                System.out.println("error bufferReader3");
            }
    però non so come continuare!!
    qualcuno mi sa aiutare???
    grazie della pazienza

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    metti i tag code, il tuo codice è illeggibile.

    non ho capito il tuo problema, la funzione che cambia l'ordine c'è?cosa non funziona?
    RTFM Read That F*** Manual!!!

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    12

    scusate il disordine

    //*scusate il disordine, sono nuovo nel forum e nel mondo java...
    espongo il problema:
    una volta controllato che il file.txt esiste l' ho chiamato file

    io vorrei creare una funzione che riconasca ogni parola del testo trasformato da file.txt in string.

    per spostare il file in una string ho usato questo procedimento: */

    string stringa="";
    try {

    System.out.println("el contenido del archivo es el siguiente: ");
    System.out.println("");
    BufferedReader leer = new BufferedReader(new FileReader(file));

    while ((stringa = leer.readLine()) != null) {
    System.out.println(s);
    }
    leer.close();
    } catch (IOException e) {
    System.out.println("error bufferReader");

    //*Adesso che ho il testo dentro una String vorrei separare ogni parola e cambiare le lettere all'interno della parola lasciando la prima e l'ultima lettera come nell'originale. es gatto=gtato
    per fare questa operazione ho usato questo procedimento: */

    try {
    BufferedReader leer = new BufferedReader(new FileReader(archivo));
    while((stringa = leer.readLine())!= null){
    StringTokenizer st = new StringTokenizer(s);
    while (st.hasMoreTokens()) {
    String token=st.nextToken();
    // System.out.println(token);
    if(token.length()>3){}
    //*da qui non so continuare in teoria vorrei che ogni parola più grande di tre lettere cambiasse le sue lettere all'interno (lasciando la prima e l'ultima come nell'originale) e vorrei che le parole cambiate si riposizionassero nel testo con la stessa punteggiatura per poi usare il primo procedimento che c'è nell'altro post"disordinato" e fare un duplicato di un file del sistema con il JFileChooser()*/



    //spero di essere stato chiaro e di non aver fatto perdere la pazienza nel precedente post
    ancora grazie

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    guarda il codice va inserito nei tag code (come da regolamento), così non si capisce niente e non si capisce nemmeno cosa vuoi.
    RTFM Read That F*** Manual!!!

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Se il problema e' il "rimescolamento" delle lettere intermedie in una parola, puoi convertire la parola in una lista di caratteri, togliere la prima e l'ultima lettera ed usare su questa lista uno dei metodi shuffle della classe Collections (package java.util), e poi ovviamente rifare il procedimento inverso per ottenere la parola.
    Si tratta di poche righe.

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    12
    perdonami, , adesso ho capito!!!
    riscrivo la parte del codice per selezionare le parole:
    codice:
    try {
    BufferedReader leer = new BufferedReader(new FileReader(archivo));
    while((stringa = leer.readLine())!= null){
    StringTokenizer st = new StringTokenizer(s);
    while (st.hasMoreTokens()) {
    String token=st.nextToken();
    // System.out.println(token);
    if(token.length()>3){}

    grazie per la risposta Kaamos non ho mai usato metodi shuffle adesso faccio una ricerca e ci provo!
    però ho più di una parola posso usare il metodo Tokenizer e poi per ogni parola estrattauso il metodo shuffle? e poi come faccio a riinserirle dentro il file.txt nello stesso ordine e con la stessa punteggiatura??
    un pò di confusione!

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Originariamente inviato da rrrobyyy
    perdonami, , adesso ho capito!!!
    riscrivo la parte del codice per selezionare le parole:
    codice:
    try {
    BufferedReader leer = new BufferedReader(new FileReader(archivo));
    while((stringa = leer.readLine())!= null){
    StringTokenizer st = new StringTokenizer(s);
    while (st.hasMoreTokens()) {
    String token=st.nextToken();
    // System.out.println(token);
    if(token.length()>3){}

    grazie per la risposta Kaamos non ho mai usato metodi shuffle adesso faccio una ricerca e ci provo!
    però ho più di una parola posso usare il metodo Tokenizer e poi per ogni parola estrattauso il metodo shuffle? e poi come faccio a riinserirle dentro il file.txt nello stesso ordine e con la stessa punteggiatura??
    un pò di confusione!
    Leggi una parola, elaborala, e scrivila nel file di output. Per la punteggiatura beh, il modo piu' semplice e scrivere nel file di output ogni carattere che consideri punteggiatura, escludendolo dall'elaborazione, esattamente come le parole con meno di 4 lettere.

    P.S.: indenta, altrimenti il codice e' poco leggibile.

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    12

    grazie

    grazie! adesso ci provo!

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    12
    questo è quello che sono riuscito:

    codice:
    package ejercicio;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.Random;
    import java.util.StringTokenizer;
    
    /**
     * @author roby
     */
    public class Ejercicio {public static String mixpalablas(String inicio)
    {       
            for (int a=0;a<inicio.length();a++){
            if (inicio.charAt(a)!=',' && inicio.charAt(a)!='.' )
                inicio.charAt(a);
            }
            char[] vec1 = inizio.toCharArray();
            char[] vec2 = inizio.toCharArray();
            
            Random random = new Random();
            int r = random.nextInt(vec1.length-1);
            int i = 0;
            int j = r+1;
            while(i <= r){
               vec2[vec1.length -i-1] = vec1[i];
                i++;
            }
            while (j <= vec1.length -1){
               vec2[j-r-1] = vec1[j];
                j++;
            }
            String nuovaparola = String.valueOf(vec2);
            return nuovaparola;
    }
        public static void main(String[] args) throws IOException {
            String filee = "r://esercizio.txt";
            String s = "";
            int j = 0;
            int f = 0;
            int i = 0;
            String nuevotexto="";
            try {
                File file = new File(archivo);
    
                if (file.exists()) {
                    System.out.println("Il file " + filee + ": esiste");
                } else if (file.createNewFile()) {
                    System.out.println("Il file " + filee + ": già caricato");
                } else {
                    System.out.println("Il file " + filee + " :no si può caricare");
                }
                System.out.println("");
    
            } catch (IOException e) {
                System.out.println("error nella creazione");
            }
            try {
    
                System.out.println("el contenido del archivo es el siguiente: ");
                System.out.println("");
                BufferedReader leer = new BufferedReader(new FileReader(file));
    
                while ((s = leer.readLine()) != null) {
                    System.out.println(s);
                }
                leer.close();
            } catch (IOException e) {
                System.out.println("error bufferReader");
    
    
            }
            try {
                System.out.println("");
                BufferedReader leer = new BufferedReader(new FileReader(filee));
                while ((s = leer.readLine()) != null) {
                    f++;
                    System.out.println("linea " + f + " = " + s.length() + " lettere");
                }
                leer.close();
            } catch (IOException e) {
                System.out.println("error bufferReader2");
            }
            System.out.println("");
            try {
                BufferedReader leer = new BufferedReader(new FileReader(filee));
                while((s = leer.readLine())!= null){  
          StringTokenizer st = new StringTokenizer(s);  
          while (st.hasMoreTokens()) { 
                String token=st.nextToken(); 
                if(token.length()>3){
                nuevotexto = token;
                 System.out.println(mixpalablas(nuovotexto));               
                }}}
                leer.close();
            } catch (IOException e) {
                System.out.println("error bufferReader3");
             }  
        }}
    non sono riuscito a usare il metodo shuffle suggerita allora ho creato una funzione che mi mescoli le lettere senza però riuscire a bloccare la prima l'ultima lettera e senza riuscire a togliere i punti e le virgole!! so che sono vicino alla soluzione però non so nuotare neanche dentro un bicchiere di acqua...avete suggerimenti da darmi??

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613
    Per togliere la prima e l'ultima, utilizza il metodo substring (vedi le API), mentre per la punteggiatura non ti resta che scorrere la stringa carattere per carattere ed eliminare i caratteri che non ti piacciono.
    Per queste operazioni però sarebbe meglio StringBuilder perché è mutabile, gli oggetti String sono immutabili ed ogni volta che fai qualche modifica ad una String in realtà ne crea una nuova.

    Detto questo, che problemi hai incontrato con shuffle?

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.