如何在Java String中的每个大写字母前添加下划线?

w4n*_*ust 6 java string replace

我有这样的"HelloWorldMyNameIsCarl"的字符串,我希望它成为像"Hello_World_My_Name_Is_Carl".我怎样才能做到这一点?

Pet*_*ler 35

是的,正则表达式可以为您做到这一点:

"HelloWorldMyNameIsCarl".replaceAll("(.)([A-Z])", "$1_$2")
Run Code Online (Sandbox Code Playgroud)

表达式[A-Z]将匹配每个大写字母并将其放入第二个组.您需要第一组.以避免替换第一个'H'.

正如Piligrim指出的那样,这种解决方案不适用于任意语言.要捕获Unicode标准定义的任何大写字母,我们需要Unicode 4.1子属性 \p{Lu},它匹配所有大写字母.所以更通用的解决方案看起来像

"HelloWorldMyNameIsCarl".replaceAll("(.)(\\p{Lu})", "$1_$2")
Run Code Online (Sandbox Code Playgroud)

谢谢Piligrim.

  • 请注意,此解决方案(与ChssPly76给出的解决方案不同)不适用于所有大写字母,但仅适用于英文字母:ÄÖÜÊÎÛÛ等等都缺失. (3认同)
  • 根据java规范,\ p {Lu}将适用于Unicode大写字母.所以正则表达式是"(.)(\\ p {Lu})" (2认同)