【问题标题】:How do I obtain spaces before prepositions? [closed]如何在介词前获得空格? [关闭]
【发布时间】:2018-05-10 18:30:48
【问题描述】:

我有字符串 'WordsofWisdom' 如果我应用这个:

replaceAll("([^_])([A-Z])", "$1 $2") 

它产生'Wordsof Wisdom',但我必须写什么才能在'of'这个词之前获得一个空格?

【问题讨论】:

    标签: java regex replaceall


    【解决方案1】:

    使用零宽度正向预测(?=xxx),结合备选列表|,并匹配所有Unicode 大写字母\p{Lu},然后将零宽度匹配替换为单个空格:

    "WordsoftheWise".replaceAll("(?=\\p{Lu}|of|the)", " ")

    结果:" Words of the Wise"

    如果您不想在第一个字母之前添加空格,请添加零宽度负前瞻(?!xxx),以防止匹配文本开头^

    "WordsoftheWise".replaceAll("(?!^)(?=\\p{Lu}|of|the)", " ")

    结果:"Words of the Wise"

    【讨论】:

    • 这确实是一道相当难的AI题。例如,您想如何解析“AloofPeople”这一行?建议的方法将给出“Alo of People”
    • 非常感谢!请问你是从哪里学会掌握这些东西的?
    • @krystal 时间和学习...
    • 你成就了我的一天,@Andreas!
    • 和我的一天....
    【解决方案2】:

    为了做到这一点,您需要先以某种方式识别字符串中间的单词 of。 indexOf 方法将识别字符串中“of”的起始索引。然后,您可以将这三个单词连接在一起。

    【讨论】:

      【解决方案3】:

      最简单的方法是使用这个:

      "WordsofWisdom".replaceAll("(.....)(..)(......)", "$1 $2 $3") 
      

      【讨论】:

      • "NotaGoodAnswer".replaceAll("(.....)(..)(......)", "$1 $2 $3")NotaG oo dAnswer
      • 没关系,因为NotaGoodAnswer 中没有介词开头。不过说真的,您自己的答案给出了Nota Good Answer,这并不好。你在这里评论的意义何在?从您自己的回答来看,我认为您显然没有认真对待 OP。
      猜你喜欢
      • 2014-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-28
      • 2013-04-04
      • 2012-05-27
      • 2019-05-13
      相关资源
      最近更新 更多