2009-12-25 9 views
40

Por ejemplo, estoy extrayendo una cadena de texto de un archivo de texto y necesito esas palabras para formar una matriz. Sin embargo, cuando hago todo eso, algunas palabras terminan con coma (,) o un punto (.) Completo o incluso tienen adjuntos (lo cual es perfectamente normal).¿Cómo elimino caracteres específicos de una cadena en particular en Java?

Lo que quiero hacer es deshacerme de esos personajes. He intentado hacer eso usando esos métodos de Cadena predefinidos en Java, pero no puedo evitarlo.

Respuesta

17

Uso:

String str = "whatever"; 
str = str.replaceAll("[,.]", ""); 

replaceAll toma un regular expression. Esto:

[,.] 

... busca cada coma y/o punto.

+0

gracias :) Sabía que no era algo difícil, simplemente no podía evitarlo. –

+0

se ha actualizado el enlace roto para 'replaceAll()' – raffian

+0

Demasiados caracteres en el literal de la carta. ¿Cómo escribo esto? –

4

No se puede modificar una cadena en Java. Ellos son inmutables. Todo lo que puede hacer es crear una nueva cadena que sea una subcadena de la cadena anterior, menos el último carácter.

En algunos casos, un StringBuffer podría ayudarlo.

+0

Gracias. Me las arreglé para hacer algo como esto: [code] for (int i = 0; i

181

reasignar la variable a una subcadena:

s = s.substring(0, s.length() - 1) 

también una forma alternativa de resolver su problema: es posible que también desee considerar el uso de un StringTokenizer para leer el archivo y establecer los delimitadores ser los caracteres que Don no quiero ser parte de las palabras

+0

eso es exactamente lo que hice y funcionó :) Por cierto se me olvidó mencionar que el uso de la clase StringTokenizer estaba estrictamente prohibido por mi mentor. –

+0

Este microensayo sugiere que la subcadena() puede ser más rápida que la expresión regular en este contexto: http://groups.google.com/group/comp.lang.java.programmer/msg/cf4e57a09eb8ff7c – trashgod

+2

@trashgod - usted no necesita una microbenchmark para decirte eso. Solo una pequeña cantidad de sentido común ... y mirando el código fuente de 'String.substring()'. –

0

Tenga en cuenta que los límites de palabras también dependen de la configuración regional. Creo que la mejor manera de hacerlo es usando java.text.BreakIterator estándar. Aquí hay un ejemplo del tutorial de java.sun.com.

import java.text.BreakIterator; 
import java.util.Locale; 

public static void main(String[] args) { 
    String text = "\n" + 
      "\n" + 
      "For example I'm extracting a text String from a text file and I need those words to form an array. However, when I do all that some words end with comma (,) or a full stop (.) or even have brackets attached to them (which is all perfectly normal).\n" + 
      "\n" + 
      "What I want to do is to get rid of those characters. I've been trying to do that using those predefined String methods in Java but I just can't get around it.\n" + 
      "\n" + 
      "Every help appreciated. Thanx"; 
    BreakIterator wordIterator = BreakIterator.getWordInstance(Locale.getDefault()); 
    extractWords(text, wordIterator); 
} 

static void extractWords(String target, BreakIterator wordIterator) { 
    wordIterator.setText(target); 
    int start = wordIterator.first(); 
    int end = wordIterator.next(); 

    while (end != BreakIterator.DONE) { 
     String word = target.substring(start, end); 
     if (Character.isLetterOrDigit(word.charAt(0))) { 
      System.out.println(word); 
     } 
     start = end; 
     end = wordIterator.next(); 
    } 
} 

Fuente: http://java.sun.com/docs/books/tutorial/i18n/text/word.html

0

Puede utilizar replaceAll() método:

String.replaceAll(",", ""); 
String.replaceAll("\\.", ""); 
String.replaceAll("\\(", ""); 

etc ..

+0

replaceAll reemplazará todo el carácter, no solo el último carácter. –

7

Para eliminar el último carácter hacer como Mark Byers dijo

s = s.substring(0, s.length() - 1); 

Además, otra forma de eliminar los caracteres que no desea sería utilizar el método .replace(oldCharacter, newCharacter).

como en:

s = s.replace(",",""); 

y

s = s.replace(".",""); 
+0

gracias, me ayuda mucho –

3

El mejor método es lo que Mark Byers explica:

s = s.substring(0, s.length() - 1) 

Por ejemplo, si queremos sustituir \ al espacio " "con ReplaceAll, no funciona bien

String.replaceAll("\\", ""); 

o

String.replaceAll("\\$", ""); //if it is a path 
+1

No creo que sea una mala respuesta, pero una cosa que no es es INFALIBLE. Intentalo "" –

Cuestiones relacionadas