【发布时间】:2018-05-10 18:30:48
【问题描述】:
我有字符串 'WordsofWisdom' 如果我应用这个:
replaceAll("([^_])([A-Z])", "$1 $2")
它产生'Wordsof Wisdom',但我必须写什么才能在'of'这个词之前获得一个空格?
【问题讨论】:
标签: java regex replaceall
我有字符串 'WordsofWisdom' 如果我应用这个:
replaceAll("([^_])([A-Z])", "$1 $2")
它产生'Wordsof Wisdom',但我必须写什么才能在'of'这个词之前获得一个空格?
【问题讨论】:
标签: java regex replaceall
使用零宽度正向预测(?=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"
【讨论】:
为了做到这一点,您需要先以某种方式识别字符串中间的单词 of。 indexOf 方法将识别字符串中“of”的起始索引。然后,您可以将这三个单词连接在一起。
【讨论】:
最简单的方法是使用这个:
"WordsofWisdom".replaceAll("(.....)(..)(......)", "$1 $2 $3")
【讨论】:
"NotaGoodAnswer".replaceAll("(.....)(..)(......)", "$1 $2 $3") 给NotaG oo dAnswer
NotaGoodAnswer 中没有介词开头。不过说真的,您自己的答案给出了Nota Good Answer,这并不好。你在这里评论的意义何在?从您自己的回答来看,我认为您显然没有认真对待 OP。