Как добавить подчеркивание перед каждой заглавной буквой внутри строки Java?

У меня есть строка, подобная этой "HelloWorldMyNameIsCarl", и я хочу, чтобы она стала чем-то вроде"Hello_World_My_Name_Is_Carl". Как я могу это сделать?

3 ответов


да, регулярные выражения могут сделать это за вас:

"HelloWorldMyNameIsCarl".replaceAll("(.)([A-Z])", "_")

выражение [A-Z] будет соответствовать каждой букве верхнего регистра и поместить его во вторую группу. Вам нужна первая группа . чтобы избежать замены первого 'H'.

As Пилигрим указал, это решение не работает для произвольных языков. Чтобы поймать любую заглавную букву, определенную Unicode stardard, нам нужно Unicode 4.1 subproperty \p{Lu}, который соответствует все прописные буквы. Таким образом, более общее решение выглядит как

"HelloWorldMyNameIsCarl".replaceAll("(.)(\p{Lu})", "_")

Спасибо Пилигрим.


это задание? Чтобы вы начали:

  1. создать StringBuffer
  2. повторите строку.
  3. проверьте каждый символ в верхнем регистре (java.lang.Character класса поможет)
  4. добавить подчеркивание в буфер, если это так.
  5. добавить текущий символ в буфер.

вот подсказка, чтобы вы подумали о возможном решении:

  1. найти способ разделения строки на части в каждой заглавной букве
  2. присоединитесь к разделенным строкам с подчеркиванием между ними

полезные ключевые слова:

  • сплит
  • регулярное выражение/выражение