我遇到了一个情况,保存到MySQL 5.1的文本中出现了代理字符。由于UTF-16在该版本中不受支持,因此我想在将其保存到数据库之前通过Java方法手动删除这些代理对。
目前我编写了以下方法,但我想知道是否有直接且最佳的处理方式。
非常感谢您的帮助。
public static String removeSurrogates(String query) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < query.length() - 1; i++) {
char firstChar = query.charAt(i);
char nextChar = query.charAt(i+1);
if (Character.isSurrogatePair(firstChar, nextChar) == false) {
sb.append(firstChar);
} else {
i++;
}
}
if (Character.isHighSurrogate(query.charAt(query.length() - 1)) == false
&& Character.isLowSurrogate(query.charAt(query.length() - 1)) == false) {
sb.append(query.charAt(query.length() - 1));
}
return sb.toString();
}
isLowSurrogate(c)
为真,则isHighSurrogate(c) || isLowSurrogate(c)
也为真(因为x || true
为真),因此!(isHighSurrogate(c) || isLowSurrogate(c))
为假,因此不会被附加。如果这太复杂了,可以使用另一个版本,但我建议学习如何处理复杂的逻辑语句,因为它们有时会出现(我在我的哲学学分中上了一门逻辑课程,它非常有用)。 - Brendan Long