用新行替换非单词相关单词

时间:2013-11-13 00:28:57

标签: java string replace

我已经知道如何从输入的字符串

中删除空白和非单词相关的文本
input = input.replaceAll("\\W","");

对于我们收到的作业,我们必须接受一句话,比如“我喜欢奶酪 - !”把它变成这样的东西:

干酪

我的代码是:

    String input = null;    // Used for a sentence input


    System.out.print("What'd You Say? ");
    input = TextIO.getlnString();    // retrieves users input

    input = input.replaceAll("\\W","\n");
    System.out.println("Wordenator Replies:\n" + input);

但它取代了所有非字母字母,如“ - ,!,。,^等”。用一条新线 所以一些文本有很多新行,如果文本中包含多个非字符文本,它最终会有大空格的空格。

我如何才能使新单词每个单词只显示一次?

2 个答案:

答案 0 :(得分:0)

来自javadoc:

\ W非单词字符:[^ \ w]

您应该使用2个替换。第一步:用无符号替换所有非字符,然后用新行替换所有空格:

input = input.replaceAll("[^ &&[\\W]]", ""); //all non-space characters except space removed
input = input.replaceAll(" +", "\n"); //all spaces (one or more) replaced with new line

答案 1 :(得分:0)

不要用换行符替换每个非单词字符,而是尝试替换非单词字符的所有运行

input = input.replaceAll("\\W+", "\n");

+表示“一个或多个” - 这样,无论您遇到单个空格还是像“ - !”这样的字符串,您只会获得一个换行符。

我建议阅读正则表达式;它们在您的编程生活中非常有用。我发现this site是一个有用的入门书。

修改

但请注意,这是解决tokenization问题的一种非常简单的方法。如果这些是您对作业的具体要求,那很好,但我建议通过提出“ 一个词是什么?”的问题来尝试额外的学分。对于在这种情况下想到的最简单的例子,“不要”会被分成

don

t

这真的是你想要的吗?