2009-12-25 4 views
40

Par exemple, j'extraire une chaîne de texte à partir d'un fichier texte et j'ai besoin de ces mots pour former un tableau. Cependant, quand je fais tout cela, certains mots se terminent par une virgule (,) ou un arrêt complet (.) Ou même ont des parenthèses attachées à eux (ce qui est tout à fait normal).Comment supprimer des caractères spécifiques d'une chaîne particulière en Java?

Ce que je veux faire est de se débarrasser de ces caractères. J'ai essayé de faire cela en utilisant ces méthodes String prédéfinies en Java mais je ne peux tout simplement pas le contourner.

Répondre

17

Utilisation:

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

replaceAll prend un regular expression. Ceci:

[,.] 

... recherche chaque virgule et/ou période.

+0

merci :) Je savais que ce n'était pas quelque chose de difficile, je ne pouvais pas le contourner. –

+0

mis à jour le lien rompu pour 'remplacerAll()' – raffian

+0

Trop de caractères dans le littéral de la Charte. Comment puis-je taper ceci? –

4

Vous ne pouvez pas modifier une chaîne en Java. Ils sont immuables. Tout ce que vous pouvez faire est de créer une nouvelle chaîne qui est la sous-chaîne de l'ancienne chaîne, moins le dernier caractère.

Dans certains cas, un StringBuffer peut vous aider à la place.

+0

Merci. J'ai réussi à faire quelque chose comme ceci: [code] pour (int i = 0; i

181

Réaffecter la variable à une sous-chaîne:

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

également une autre façon de résoudre votre problème: vous pouvez également envisager d'utiliser un StringTokenizer pour lire le fichier et définir les délimiteurs être les caractères que vous don Je ne veux pas faire partie des mots.

+0

qui est exactement ce que je l'ai fait et cela a fonctionné :) BTW j'oublié de mentionner que l'utilisation de la classe StringTokenizer était strictement interdit par mon mentor. –

+0

Ce micro-benchmark suggère que substring() peut être plus rapide que regex dans ce contexte: http://groups.google.com/group/comp.lang.java.programmer/msg/cf4e57a09eb8ff7c – trashgod

+2

@trashgod - vous ne le faites pas besoin d'un microbenchmark pour vous le dire. Juste une petite quantité de bon sens ... et en regardant le code source de 'String.substring()'. –

0

Notez que les limites de mots dépendent également du paramètre régional. Je pense que la meilleure façon de le faire en utilisant java.text.BreakIterator standard. Voici un exemple du tutoriel 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(); 
    } 
} 

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

0

Vous pouvez utiliser la méthode replaceAll():

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

etc ..

+0

replaceAll remplacera tout le caractère pas le dernier caractère seulement. –

7

Pour supprimer le dernier caractère faire comme Mark Byers dit

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

En outre, une autre façon de supprimer les caractères que vous ne voulez pas serait d'utiliser la méthode .replace(oldCharacter, newCharacter).

comme dans:

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

et

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

merci, ça m'aide beaucoup –

3

La meilleure méthode est ce que Mark Byers explique:

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

Par exemple, si l'on veut remplacer \ 'espace " "avec ReplaceAll, il ne fonctionne pas bien

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

ou

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

Je ne pense pas que ce soit une mauvaise réponse, mais une chose n'est pas INFALLLIBLE. Essaye le "" –

Questions connexes