【问题标题】:Replace non word related words with new line用新行替换与单词无关的单词
【发布时间】:2013-11-13 00:28:57
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java string replace


    【解决方案1】:

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

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

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

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

    编辑

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

    don
    
    t
    

    这真的是你想要的吗?

    【讨论】:

    • 比我的解决方案更好:-)。
    【解决方案2】:

    来自 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
    

    【讨论】:

      猜你喜欢
      • 2020-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      • 2015-03-02
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多