我已经知道如何从输入的字符串
中删除空白和非单词相关的文本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);
但它取代了所有非字母字母,如“ - ,!,。,^等”。用一条新线 所以一些文本有很多新行,如果文本中包含多个非字符文本,它最终会有大空格的空格。
我如何才能使新单词每个单词只显示一次?
答案 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
这真的是你想要的吗?