【问题标题】:Capitalizing hyphenated names大写连字符的名称
【发布时间】:2014-03-06 16:30:11
【问题描述】:

我正在使用来自 apache commons 的 WordUtils 来正确规范人名。例如,

AnGEl lEe -> Angel Lee

而且效果很好。现在我想出的测试用例之一是连字符名称。通常,连字符的每个部分的第一个字母都是大写的,所以我希望

AnGeL lEe-YaNG --> Angel Lee-Yang

但是,使用我现有的简单调用 capitalizeFully 的方法会导致

Angel Lee-yang

如何做到这一点?

【问题讨论】:

  • 使用不同的实用函数和/或自己编写?也许识别包含连字符的字符串并将它们分解,分别将连字符后面的内容大写?

标签: java


【解决方案1】:

您可以将多个分隔符传递给重载的WordUtils.capitalizeFully(String, char...) 方法:

WordUtils.capitalizeFully("AnGeL lEe-YaNG", ' ', '-')

【讨论】:

  • 哦,我想知道智能感知是否只是在签名中显示...,因为它太长了。我在进行单独的调用,但没想到只是将所有分隔符都传入!
  • @MxyL 那叫vararg。
【解决方案2】:

所以这似乎实际上是 Apache 的 WordUtils 方法 WordUtils.capitalizeFully 在 WordUtils 2.1 版之前的一个已知问题。

如果您仍然对使用 WordUtils 感兴趣,请使用以下代码:

`WordUtils.capitalizeFully("JEfF SamPsOn-bROWN", new char[]{' ', '-'});


这样做的目的是将字符数组中分隔符之后的所有内容大写。这基本上只会将 J、S 和 B 大写。

有关更多信息,您可以查看: Word Utils Documentation

【讨论】:

    【解决方案3】:

    查看 API

    https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/WordUtils.html

    有 capitalizeFully(String str, char[] delimiters) 可以解决你的问题。你可以使用这个方法还是你无法访问调用capitalizeFully的代码?

    【讨论】:

      【解决方案4】:

      使用带有一组分隔符的 capitalizeFully 的重载,并传入 '-' 作为其中之一:

      WordUtils.capitalizeFully("i aM.fine", {'.'}) = "I am.Fine"
      

      WordUtils reference

      【讨论】:

        【解决方案5】:

        我建议您还包括其他字符,例如 '、` 和 -、-、...:

        org.apache.commons.text.WordUtils.capitalizeFully(name.trim(), ' ', '-', '—', '\'', '`')
        

        这将处理以下几乎真实世界的示例:)

        mel colm-cille gerard o'brian -> Mel Colm-Cille Gerard O'Brian

        奖励:除了修剪之外,还可以考虑删除重复的空格。

        注意:也许可以在 UI 中处理这个,而不是过早地这样做......

        【讨论】:

          猜你喜欢
          • 2017-01-13
          • 2022-06-30
          • 2015-12-27
          • 2015-01-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多