Я фанат SQL DBDiff , который является инструментом с открытым исходным кодом, который можно использовать для сравнения таблиц, представлений, функций, пользователей и т. Д. Двух экземпляров баз данных SQL Server и генерирования изменений. скрипт между исходной и целевой базами данных.
Китайские символы находятся в определенных диапазонах Unicode:
Итак, все вы в основном необходимо проверить, находится ли кодовая точка символа в известных диапазонах. Этот пример является хорошей отправной точкой для написания синтаксического анализатора / разделителя на основе стека, вам нужно только расширить его, чтобы отделить цифры от латинских букв, что должно быть достаточно очевидным (подсказка: Character # isDigit ()
):
Set<UnicodeBlock> chineseUnicodeBlocks = new HashSet<UnicodeBlock>() {{
add(UnicodeBlock.CJK_COMPATIBILITY);
add(UnicodeBlock.CJK_COMPATIBILITY_FORMS);
add(UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS);
add(UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS_SUPPLEMENT);
add(UnicodeBlock.CJK_RADICALS_SUPPLEMENT);
add(UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION);
add(UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS);
add(UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A);
add(UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B);
add(UnicodeBlock.KANGXI_RADICALS);
add(UnicodeBlock.IDEOGRAPHIC_DESCRIPTION_CHARACTERS);
}};
String mixedChinese = "查詢促進民間參與公共建設法(210BOT法)";
for (char c : mixedChinese.toCharArray()) {
if (chineseUnicodeBlocks.contains(UnicodeBlock.of(c))) {
System.out.println(c + " is chinese");
} else {
System.out.println(c + " is not chinese");
}
}
Удачи.
Вот подход, который я бы выбрал.
Вы можете использовать Character.codePointAt (char [] charArray, int index), чтобы вернуть значение Unicode для char в вашем массиве char.
] Вам также понадобится отображение латинских символов Unicode.
Если вы посмотрите в исходный код Character.UnicodeBlock, полный блок LATIN представляет собой интервал [0x0000, 0x0249]. По сути, вы проверяете, находится ли ваша кодовая точка Unicode где-то в пределах этого интервала.
Я подозреваю, что есть способ просто использовать Character.Subset, чтобы проверить, содержит ли он ваш char, но я не изучал это.
]