Eliminar espacios a la derecha

Iniciado por Xedrox, 5 Julio 2011, 02:19 AM

0 Miembros y 1 Visitante están viendo este tema.

Xedrox

Supongan que tengo el siguiente string    "hola             ", y quiero que sea simplemente "hola", hay alguna funcion que elimine los espacios o me tengo que programar alguna?? -.- -.- -.- -.- -.- -.-

GRACIAS!

Edu

No se si en Java existe el string.Trim() Y si existe fijate que habra 2 mas para elegir para que lado, por si alguna vez necesitas solo de un lado, ya que ahora da igual q lado pienso.
O sino podrias usar la funcion de remplazar para remplazar los " " por ""

Valkyr

Puedes usar la función trim() de String. Esta función te elimina los blancos que hayan antes de comenzar el texto y al final, pero los que hay por enmedio NO los elimina.

Otra forma que podrías tener de eliminarlos sería usando la función split(" +"), la cual te devolvería un array con todas las palabras que hay separadas por espacios. Por ejemplo, si tenemos: "hola,  me      llamo   Perico de Los       palotes" te devolvería un array que sería: hola,;me;llamo;Perico;de;Los;palotes; (he separado cada elemento por ; para que quede más claro). El motivo de poner como parámetro a la función " +" es porque es una expresión regular que significa uno o más espacios.

Espero que te sirva.

Saludos.

klaine

Hace un tiempo me hice esta clase, espero te sirva la el método inTrim(), saludos  ;)



import javax.swing.*;
import java.io.*;
import javax.swing.JFileChooser.*;
import javax.swing.filechooser.FileFilter;

public class ZString {

    public ZString(){

    }

    String getFile(String[] exts, String dir, String description){

        /**
         *
         * Obtiene la ruta de un archivo, dada una lista de extensiones
         * de la forma:
         *
         *   ".ext"
         *
         * El segundo argumento asigna una ruta
         * como directorio inicial, donde se mostrara
         * el cuadro de dialogo abrir como
         *
         * El tercer argumento asigna un valor de referencia
         * para el usuario que vera el cuadro de dialogo,
         * por ejemplo:
         *
         * "Archivos de texto plano"
         *
         *
         */

        txtFilter txf = new txtFilter();

        txf.extensions = exts;

        txf.desc = description;

        JFileChooser jfc = new JFileChooser();

        jfc.setFileFilter(txf);

        jfc.setCurrentDirectory(new File(dir));

        int res=jfc.showOpenDialog(null);

        if(res==jfc.APPROVE_OPTION){

            return jfc.getSelectedFile().toString();

        }else{

            return "No se seleccionó ningun archivo";

        }



    }

    String inTrim(String s){

        /**
         * Elimina el exceso de espacios dada una cadena de caracteres
         *
         * Retorna: Cadena la cadena de caracteres recibida
         * sin espacios al principio ni al final y
         * cada palabra separada solo de un espacio
         *
         * Si se recibe un salto de linea el utltimo caracter de
         * una linea sera separado de la siguiente linea
         * solo por un salto de linea y no un espacio mas
         * un salto de linea
         *
         */

        String out="";

        String arr[] = s.split(" ");

        boolean init = true;

        for(String val:arr){

            if(init&&!val.equals("")){

                out+=val;
                init=false;

            }else if (!val.equals("")){

                out+=" "+ val;

            }



        }

        return out.replace("\n ", "\n");
    }

    void show(String s){

        JOptionPane.showMessageDialog(null, s);

    }

    int txtCount_words(String file){

        /**
         * Dada la ruta de un archivo de texto plano
         * devuelve el numero de palabras
         * encontradas en ese acrchivo.
         *
         *
         */

        String a="", in="";

        try{

        BufferedReader bf = new BufferedReader(new FileReader(new File(file)));



        while(a!=null){

            a=bf.readLine();

            if (a!=null){

                in+=a + " ";

            }

        }


        }catch(FileNotFoundException FEX){

        }catch(IOException IOEX){

        }

        String tin = (String) (new ZString()).inTrim(in);



        String[] ing = tin.split(" ");

        if(new ZString().txtCount_chars(file)==0){

            return 0;

        }else{

        return ing.length;

        }

    }

    void writer(String[] args, String file, boolean rewrite, boolean delete_on_exit){

        /**
         *
         * El primer argumento indica
         * las palabras que se agregaran al archivo de
         * texto plano.
         *
         * El segundo argumento indica la ruta de
         * dicho archivo.
         *
         * Si el tercer argumento
         * es true el archivo
         * se sobreescribe
         *
         * Si el cuarto argumento es true
         * el archivo se borra al cerrar
         * el programa
         *
         *
         */

    String[] in=this.reader(file).split("\n");

    Writer w=new Writer(file, delete_on_exit);

    if(rewrite){

        w.touch();

    }else{

    for(String val:in){

        w.write(val);

    }

    }

    for(String val:args){

        w.write(val);

    }

    w.close();

    }


    int txtCount_chars(String f){

        /**
         * Dada la ruta de un archivo de texto plano
         * devuelve el numero de caracteres
         * encontrados en ese acrchivo.
         *
         * No se cuentan espacios
         * ni saltos de linea
         *
         */

        String a="", in="";

        try{

        BufferedReader bf = new BufferedReader(new FileReader(new File(f)));

        while(a!=null){

            a=bf.readLine();

            if (a!=null){

                in += a;

            }

        }

        }catch(FileNotFoundException FEX){

        }catch(IOException IOEX){

        }

        return (new ZString()).noSpace(in).length();

    }

    public String reader(String file){

        /**
         * Dada la ruta de un archivo de texto plano,
         * devuelve el contenido de dicho archivo
         *
         *
         */

        String out="";

        String a="";

        try{

        BufferedReader r=new BufferedReader(new FileReader(new File(file)));

        while(a!=null){

            a=r.readLine();

            if(a!=null){

            out+=a + "\n";

            }

        }

        }catch(FileNotFoundException fnfEX){

            JOptionPane.showMessageDialog(null, "El archivo especificado no existe");

        }catch(IOException ex){



        }

        return out;

    }

    String noSpace(String s){

        /**
         *
         * Dado un String retorna el mismo String
         * Sin espacios
         *
         */

        String out="";

        String[] in = s.split(" ");

        for(String val:in){

            out+=val;

        }

        return out;

    }

    String getTxtFile(){

        /**
         *
         * Abre un cuadro de dialogo abrir...
         * Devuelve la ruta del archivo especificado en esa
         * ruta, si se presiona cancelar, no se tomaran acciones.
         *
         * (Queda a criterio)
         *
         */

        String file="";

        JFileChooser jfc = new JFileChooser();

        jfc.setCurrentDirectory(new File(System.getProperty("user.home") + "\\Desktop"));
        jfc.setApproveButtonText("Analizar");
        jfc.setMultiSelectionEnabled(false);

        txtFilter f=new txtFilter();

        jfc.setFileFilter(f);

        int returnval = jfc.showDialog(jfc, "Analizar...");

        if (returnval==jfc.APPROVE_OPTION){

            file=jfc.getSelectedFile().toString();

        }



        return file;

    }

}

class txtFilter extends FileFilter{

    String[] extensions = {".txt", ".bat", ".vbs", ".js"};

    String desc = "Plain txt files |*.txt |*.bat | *.vbs |*.js";

    txtFilter(){

    }


    public boolean accept(File f){

        boolean a=false;

        if(f.isDirectory()){

            return true;

        }

        for (String val:extensions){

            if (f.toString().endsWith(val)){

                a=true;
                break;

            }else{

                a=false;

            }

        }

        return a;

    }

    public String getDescription(){

        return desc;

    }



}


class Writer {

    java.io.BufferedWriter bw;

    String file="";

    Writer(String foo, boolean delete){

        this.file=foo;

        try{

            File f = new File(this.file);

            if(delete){

            f.deleteOnExit();

            }

            bw=new BufferedWriter(new FileWriter(f));

        }catch(IOException ex){

        }
    }

    public void write(String line){

        try{

        bw.append(line);

        bw.newLine();

        }catch (IOException ex) {

            ex.printStackTrace();

        }

        }



    public void touch(){

        /**
         ** Vacia el archivo con el cual se construyo este objeto
         ** o lo crea si no existe
         **/

        File f = new File(this.file);



        try{

            if(f.exists()){
            f.delete();
            f.createNewFile();
            }else{
            f.createNewFile();
            }

        }catch(IOException c){

        }

    }

    public void touch(String foo){

        /***
         * Vacia el archivo dado
         *
         * Si el archivo no existe se crea
         *
         * Si el String recibido no es una ruta valida
         * se lanzara IOException, se captura aqui mismo,
         * las acciones a tomar en ese caso quedan a criterio.
         * En este metodo el catch esta vacio
         *
         * NOTA: Las rutas de archivos se separan con "\",
         * "\" es un caracter especial para java, para no tener problemas con esto,
         * se usa "\\" para denotar dicho caracter
         *
         *
         ***/



        try{

            File fi= new File(foo);

            if(fi.exists()){

                fi.delete();
                fi.createNewFile();

            }else{

                fi.createNewFile();

            }

        }catch(IOException c){

        }

    }

public void close(){

    try{

        this.bw.close();

    }catch(IOException ex){

    }

}

}


Valkyr

El método que propones no está mal, pero es bastante ineficiente trabajar con un string e ir concatenando elementos. Si lo haces con un StringBuffer funcionaría mucho mejor. Además, si haces un split() y le pasas como parámetro " +" no tienes que realizar comprobaciones, ya que te devuelve un array que solo contiene palabras (fijate que el parámetro a dicha función es una expresión regular, y con la que he escrito, reconoce uno o más espacios).

Saludos.

klaine

de hecho deberia arreglar eso por que si a split() le pasas "\\" te tira unexpectedInternalError xD

Saludos  ;)

Starcarr

Ustedes se complican mucho con cosas que ya están hechas:

Citar
public static void main(String[] args) {
        String s= "    Hola mundo mundial!             ";
        System.out.println(s.trim());
        System.out.println(s.replace(" ", ""));
    }

Resultado:
Citar
Hola mundo mundial!
Holamundomundial!

Saludos.

Valkyr

Cita de: Starcarr en 25 Julio 2011, 22:02 PM
Ustedes se complican mucho con cosas que ya están hechas:

Resultado:
Saludos.

Sí, pero si el objetivo es dejar las palabras separadas entre sí por un único espacio, y que no empiece ni termine por espacios, lo que propones no valdría.

Una forma que se me acaba de ocurrir podría ser esta:

Código (java) [Seleccionar]

String texto = new String("    Hola    esto   es una prueba      de eliminar      espacios                    ");
System.out.println(texto);
texto = texto.replaceAll(" +", " ");
texto = texto.trim();
System.out.println(texto);


Y nos devolvería la siguiente salida:

    Hola    esto   es una prueba      de eliminar      espacios                   
Hola esto es una prueba de eliminar espacios


Donde, se han eliminado los espacios por la izquierda y la derecha, y además solo existe un espacio entre cada palabra.

Saludos.

.rn3w.

Utiliza un tokenizer (solo para frases cortas) o un lector (para textos largos)
en el tokenizer tu le mandas un delimitador por ejemplo " " o "       " que es lo mismo en la frase siguiente : hola mundo           como                 estas
el resultado sera hola mundo como estas y asunto solucionado.