2009-12-25 20 views
40

Zum Beispiel extrahiere ich eine Text-String aus einer Textdatei und ich brauche diese Wörter, um ein Array zu bilden. Wenn ich das alles mache, enden einige Wörter mit Komma (,) oder einem Punkt (.) Oder haben Klammern an ihnen (was völlig normal ist).Wie lösche ich bestimmte Zeichen aus einem bestimmten String in Java?

Was ich tun möchte, ist diese Zeichen loszuwerden. Ich habe versucht, dies mit den vordefinierten String-Methoden in Java zu tun, aber ich komme einfach nicht herum.

Antwort

17

Verwendung:

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

replaceAll nimmt einen regular expression. Dies ist:

[,.] 

... sucht nach jedem Komma und/oder Punkt.

+0

danke :) Ich wusste, dass es nicht etwas schwierig war, konnte einfach nicht herumkommen. –

+0

aktualisiert defekter Link für 'replaceAll()' – raffian

+0

Zu viele Zeichen im Charter-Literal. Wie tippe ich das eigentlich? –

4

Sie können eine Zeichenfolge in Java nicht ändern. Sie sind unveränderlich. Alles, was Sie tun können, ist, eine neue Zeichenfolge zu erstellen, bei der es sich um eine Teilzeichenfolge der alten Zeichenfolge minus dem letzten Zeichen handelt.

In einigen Fällen könnte Ihnen stattdessen ein StringBuffer helfen.

+0

Danke. Ich habe es geschafft, so etwas zu tun: [code] für (int i = 0; i

181

Umhänge um die Variable zu einem Teil:

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

auch eine alternative Möglichkeit, Ihr Problem zu lösen: Sie können auch ein StringTokenizer mit berücksichtigen, dass die Datei zu lesen und die Begrenzungszeichen gesetzt um die Zeichen sein, das SieFormal don Ich möchte nicht Teil von Wörtern sein.

+0

das ist genau das, was ich tat und es funktionierte :) BTW vergessen ich zu erwähnen, dass die Verwendung von Klasse StringTokenizer streng durch mein Mentor war verboten. –

+0

Diese Micro-Benchmark schlägt vor, dass substring() in diesem Kontext schneller als Regex sein kann: http://groups.google.com/group/comp.lang.java.programmer/msg/cf4e57a09eb8ff7c – trashgod

+2

@trashgod - Sie nicht brauche ein Mikrobenzeichen, um dir das zu sagen. Nur ein kleiner Teil des gesunden Menschenverstandes ... und Blick auf den Quellcode von 'Stringstring()'. –

0

Beachten Sie, dass die Wortgrenzen auch vom Gebietsschema abhängen. Ich denke, der beste Weg, um es mit Standard-java.text.BreakIterator zu tun. Hier ist ein Beispiel aus dem java.sun.com-Tutorial.

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(); 
    } 
} 

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

0

Sie replaceAll() Methode verwenden:

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

etc ..

+0

replaceAll ersetzt alle Zeichen, nicht nur die letzten Zeichen. –

7

Um das letzte Zeichen zu entfernen tun als Mark Byers sagte

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

Eine weitere Möglichkeit, die nicht gewünschten Zeichen zu entfernen, wäre die Methode .replace(oldCharacter, newCharacter).

wie in:

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

und

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

danke, es hilft mir sehr –

3

Die beste Methode ist, was Mark Byers erklärt:

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

Zum Beispiel, wenn wir \ zu Raum ersetzt werden soll " "mit ReplaceAll, es funktioniert nicht gut

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

oder

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

Ich denke nicht, dass es eine schlechte Antwort ist, aber eine Sache, die es nicht ist, ist Infalibel. Probiere es an "" –

Verwandte Themen