2009-12-25 123 views
40

例如,我从文本文件中提取文本字符串,我需要这些单词来形成一个数组。然而,当我做了所有以逗号(,)或句号(。)结尾的单词,或者甚至附有括号(这完全正常)时。如何从Java中的特定字符串中删除特定字符?

我想要做的是摆脱这些字符。我一直试图用Java中的那些预定义的String方法来做到这一点,但我无法绕过它。

回答

17

用途:

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

replaceAll需要regular expression。这:

[,.] 

...寻找每个逗号和/或期间。

+0

谢谢:) 我知道这不是什么困难,只是无法绕过它。 – 2009-12-25 23:23:03

+0

已更新已断开的链接'replaceAll()' – raffian 2013-12-17 03:45:07

+0

章程文字中的字符太多。我如何实际输入这个? – 2015-04-29 20:42:23

4

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

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

+0

谢谢。我设法做这样的事情: [code] for(int i = 0; i 2009-12-25 23:25:33

181

重新分配变量的子字符串:

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

而且解决你的问题的另一种方法:你可能还需要考虑使用StringTokenizer读取该文件,并设置分隔符是字符你不不想成为单词的一部分。

+0

这正是我所做的,它的工作:) 顺便说一句我忘了提到,我的导师严格禁止使用StringTokenizer类。 – 2009-12-25 23:27:06

+0

这个微型基准测试表明substring()在这种情况下可能比正则表达式更快:http://groups.google.com/group/comp.lang.java.programmer/msg/cf4e57a09eb8ff7c – trashgod 2009-12-25 23:45:00

+2

@trashgod - 你不需要需要一个microbenchmark来告诉你。只是少量的常识...并查看'String.substring()'的源代码。 – 2009-12-26 01:12:02

0

请注意,单词边界还取决于语言环境。我认为使用标准的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("\\(", ""); 

等。

+0

replaceAll会替换所有字符而不是最后一个字符。 – 2014-04-24 04:37:36

7

要删除的最后一个字符做的Mark Byers

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

此外,另一种删除不需要的字符的方法是使用.replace(oldCharacter, newCharacter)方法。

为:

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

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

谢谢,它对我很有帮助 – 2009-12-25 23:29:09

3

最好的方法是什么马克拜尔斯解释说:

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

例如,如果我们要替换\空间“ “与ReplaceAll,它不能正常工作

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

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

我不认为这是一个不好的答案,但有一点不是INFALLLIBLE。试试 ”” – 2013-05-28 20:43:03

相关问题