Вы можете использовать это регулярное выражение, которое будет соответствовать любому слову, содержащему хотя бы одну заглавную букву, за исключением того, что в любом случае оно будет игнорировать совпадение с первым словом.
\b(?<!^)(?=[a-z]*[A-Z])[a-zA-Z]+\b
Regex Demo
А вот Java-код, который выдаст вам строку, в которой каждое слово, имеющее заглавную букву, будет преобразовано в строчные буквы с использованием matcher.appendReplacement
List<String> sentenceList = Arrays.asList("Il CodiCe della mappa non deVe usCire dalla tomba.",
"E il CodiCe per deCifrare la mappa si troVa a Volubilis, ViCino alle roVine romane in MaroCCo.");
Pattern p = Pattern.compile("\\b(?<!^)(?=[a-z]*[A-Z])[a-zA-Z]+\\b");
sentenceList.forEach(x -> {
System.out.println("Input: " + x);
Matcher m = p.matcher(x);
StringBuffer sb = new StringBuffer();
while (m.find()) {
m.appendReplacement(sb, m.group().toLowerCase());
}
m.appendTail(sb);
System.out.println("Lowercased string: " + sb);
System.out.println();
});
Печать
Input: Il CodiCe della mappa non deVe usCire dalla tomba.
Lowercased string: Il codice della mappa non deve uscire dalla tomba.
Input: E il CodiCe per deCifrare la mappa si troVa a Volubilis, ViCino alle roVine romane in MaroCCo.
Lowercased string: E il codice per decifrare la mappa si trova a volubilis, vicino alle rovine romane in marocco.