4

这是一个给给定输入名词添加撇号的算法。

你将如何构造一个字符串来显示所有权?

/**
 * apostrophizes the string properly
 * <pre>
 * curtis = curtis'
 * shaun = shaun's
 * </pre>
 *
 * @param input string to apostrophize
 * @return apostrophized string or empty string if the input was empty or null.
 */
public static String apostrophize(String input) {
    if (isEmpty(input)) return "";

    if ("s".equalsIgnoreCase(StringUtils.right(input,1))) {
        return input + "'";
    } else {
        return input + "'s";
    }
}
4

3 回答 3

4

你将如何构造一个字符串来显示所有权?

替代方案是:

  • 通过避免生成某个任意单词或名称的所有格来避免该问题。这就是我会做的……除非我感到自虐。

  • 做一个简单的工作,这将(​​不可避免地)导致英语在某些情况下未能通过“良好风格”测试。并准备好从无休止的 dingbats 中转移抱怨,这些 dingbats 与他们的时间没有什么比抱怨糟糕的风格/语法更好的事情了。

  • 花很长时间构建能够将单词分析为单数/复数、常规名词/专有名词等的基础设施。然后根据您正在生成的文本的句法/语义分析来实施样式规则。(然后为您的网站......或任何......需要支持的任何自然语言重复整个过程。)

于 2010-01-26T01:22:18.030 回答
2

倒过来的形式更稳定

 String.Format("The {1} of {0}", owner, item);
于 2010-01-31T10:29:02.867 回答
2

不,这在语法上是不正确的。柯蒂斯是说某物属于柯蒂斯的正确方式,因为柯蒂斯是单数的。如果名词是复数,你会使用尾随撇号来表示所有格。

编辑:肖恩,作为一名有丰富的英语作家和编辑以及程序员经验的人,我认为这个问题没有简单的答案。我不觉得用“Curtis”来表达所有格是正确的,我也觉得在这个主题上有广泛的——尽管不是普遍的——一致。

解决这个问题的任何算法方法的真正工作是确定名词是单数还是复数,这是一个非常难以解决的问题,远远超出了 StackOverflow 答案的范围。祝你好运。

于 2010-01-25T20:18:36.143 回答