如何在Java中从特定字符串中删除特定字符?

40
例如,我正在从文本文件中提取一个文本字符串,并且需要将这些单词组成一个数组。然而,当我这样做时,一些单词以逗号(,)、句号(.)甚至带有括号(这是完全正常的)结束。
我想要做的是去掉这些字符。我一直在尝试使用Java中那些预定义的String方法来实现,但我就是无法解决它。
7个回答

181

将变量重新赋值为子字符串:

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

还有一种解决你问题的替代方法:你可能想考虑使用StringTokenizer来读取文件,并将分隔符设置为不希望成为单词一部分的字符。


顺便提一下,我忘了说我的导师严禁使用StringTokenizer类,但我确实这样做了,而且它起作用了 :) - Slavisa Perisic
这个微基准测试表明,在这种情况下,substring() 可能比正则表达式更快:http://groups.google.com/group/comp.lang.java.programmer/msg/cf4e57a09eb8ff7c - trashgod
2
@trashgod - 你不需要一个微基准来告诉你这个。只需要一点常识...和查看 String.substring() 的源代码即可。 - Stephen C

17

使用:

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

replaceAll方法使用正则表达式。这是一个例子:

[,.]

...查找每个逗号和/或句点。


我知道这不是什么难事,只是一直无法解决。 - Slavisa Perisic
字符字面量中的字符过多。我该如何实际输入这个? - Oliver Dixon

7

按照Mark Byers所说,要删除最后一个字符

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

此外,另一种去除不需要的字符的方法是使用.replace(oldCharacter, newCharacter)方法。例如:
s = s.replace(",","");

并且

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

4

在Java中,您无法修改字符串。它们是不可变的。您所能做的就是创建一个新字符串,该字符串是旧字符串的子字符串,减去最后一个字符。

在某些情况下,StringBuffer可能会更好地帮助您。


谢谢。我成功地做了类似这样的事情: [code] for (int i = 0; i < textArray.length; i++) { if ((textArray[i].endsWith(",")) || textArray[i].endsWith(".")) textArray[i].substring(textArray[i].indexOf(textArray[i].length()-1)); System.out.println(textArray[i].toLowerCase()); }[/code] - Slavisa Perisic

3
最好的方法是Mark Byers所解释的方法:
s = s.substring(0, s.length() - 1)

例如,如果我们想要使用ReplaceAll将\替换为空格" ",它不会很好地工作。
String.replaceAll("\\", "");

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

1
我不认为这是一个糟糕的答案,但它并不是绝对正确的。可以在“”上尝试一下。 - Bill K

0
请注意,单词边界也取决于Locale。我认为使用标准的java.text.BreakIterator是最好的方法。以下是来自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();
    }
}

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


0
你可以使用 replaceAll() 方法:
String.replaceAll(",", "");
String.replaceAll("\\.", "");
String.replaceAll("\\(", "");

等等……


replaceAll会替换所有字符而不仅仅是最后一个字符。 - chinna_82

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接