in src/main/java/org/apache/commons/codec/language/DoubleMetaphone.java [507:538]
private int handleJ(final String value, final DoubleMetaphoneResult result, int index,
final boolean slavoGermanic) {
if (contains(value, index, 4, "JOSE") || contains(value, 0, 4, "SAN ")) {
//-- obvious Spanish, "Jose", "San Jacinto" --//
if ((index == 0 && (charAt(value, index + 4) == ' ') ||
value.length() == 4) || contains(value, 0, 4, "SAN ")) {
result.append('H');
} else {
result.append('J', 'H');
}
index++;
} else {
if (index == 0 && !contains(value, index, 4, "JOSE")) {
result.append('J', 'A');
} else if (isVowel(charAt(value, index - 1)) && !slavoGermanic &&
(charAt(value, index + 1) == 'A' || charAt(value, index + 1) == 'O')) {
result.append('J', 'H');
} else if (index == value.length() - 1) {
result.append('J', ' ');
} else if (!contains(value, index + 1, 1, L_T_K_S_N_M_B_Z) &&
!contains(value, index - 1, 1, "S", "K", "L")) {
result.append('J');
}
if (charAt(value, index + 1) == 'J') {
index += 2;
} else {
index++;
}
}
return index;
}