Eu entendo por que a saída desejada não é fornecida para converter usando regex uma string como FooBara Foo_Barque em vez disso fornece Foo_Bar_. Eu poderia ter feito algo com String.substring substring(0, string.length() - 2)ou apenas substituído o último caractere, mas acho que há uma solução melhor para tal cenário.
Aqui está o código:
String regex = "([A-Z][a-z]+)";
String replacement = "$1_";
"CamelCaseToSomethingElse".replaceAll(regex, replacement);
/*
outputs: Camel_Case_To_Something_Else_
desired output: Camel_Case_To_Something_Else
*/
Pergunta: Procurando uma maneira mais organizada de obter a saída desejada?