0

我已经知道如何从输入的字符串中删除空格和非单词相关的文本

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

但它会替换所有非字符字母,例如“-、!、.、^ 等”。换行 因此,有些文本有很多新行,如果文本中包含多个非字符文本,则最终会出现大量空白。

我将如何让新行每个单词只出现一次?

4

2 回答 2

0

来自 javadoc:

\WA 非单词字符:[^\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
于 2013-11-13T00:34:30.033 回答
0

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

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

+意味着“一个或多个” - 这样,无论您遇到单个空格还是“--!”之类的字符串,您都只会得到一个换行符。

我建议阅读正则表达式;它们将在您的编程生活中证明非常有用。我发现这个网站是一个有用的入门。

编辑

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

don

t

这真的是你想要的吗?

于 2013-11-13T00:41:06.517 回答