我正面临一种情况,我在保存到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();
}
这里有几件事:
Character.isSurrogate(char c)
:当且仅当它是低代理代码单元或高代理代码单元时,char值才是代理代码单元。
检查配对似乎毫无意义,为什么不删除所有替代物呢?
x == false
相当于 !x
StringBuilder
在不需要同步的情况下更好(例如,从未离开本地作用域的变量)。
我建议这样:
public static String removeSurrogates(String query) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < query.length(); i++) {
char c = query.charAt(i);
// !isSurrogate(c) in Java 7
if (!(Character.isHighSurrogate(c) || Character.isLowSurrogate(c))) {
sb.append(firstChar);
}
}
return sb.toString();
}
if
陈述您询问了以下声明:
if (!(Character.isHighSurrogate(c) || Character.isLowSurrogate(c))) {
sb.append(firstChar);
}
理解它的一种方法是将每个操作分解为自己的功能,因此您可以看到该组合可以实现您的期望:
static boolean isSurrogate(char c) {
return Character.isHighSurrogate(c) || Character.isLowSurrogate(c);
}
static boolean isNotSurrogate(char c) {
return !isSurrogate(c);
}
...
if (isNotSurrogate(c)) {
sb.append(firstChar);
}
问题内容: 这是我的代码: 在搜寻这些网页时,我发现一些非AScii字符进入了从该脚本编写的html文件中,我需要删除这些字符或将其解析为可读字符。有什么建议吗?谢谢 问题答案: 字符为8字节(0-255),ascii字符为7字节(0-127),因此您只需删除ord值低于128的所有字符 chr将整数转换为字符,ord将字符转换为整数。 这应该是您的最终代码
假设我有一个这样的字符串: 我想做的是删除字符串中的每12个字符,所以我会删除12个索引,然后是第24个,然后是第36个,等等,直到字符串结束。 我删除的索引(每12个或每2个)必须等于我拥有的字符变量,因为该变量会发生变化。 我尝试这样做与正则表达式: 但它不起作用。有帮助吗?
问题内容: 如何在Java Servlet中删除cookie? 我尝试了这个:http : //www.jguru.com/faq/view.jsp?EID=42225 编辑:以下内容现在可以成功运行,它似乎是以下各项的组合: 和 在我做之前: 根据文档关闭浏览器时,cookie会过期。 负值表示cookie不会持久存储,并且在Web浏览器退出时将被删除。零值将导致cookie被删除。 使Cook
问题内容: 如何在我的localDate中删除T? 我需要删除“ T”以匹配数据库中的数据。 这是我的代码 我得到以下输出: 删除“ T”字符的最佳方法是什么?有想法吗? 问题答案: 删除“ T”字符的最佳方法是什么?有想法吗? 使用来格式化所需方式的值… 哪个打印… 请记住,日期/时间对象只是自固定时间点(例如Unix纪元)以来经过的时间量的容器,它们没有自己的内部/可配置格式,它们倾向于使用当
问题内容: 为了访问Java中String的各个字符,我们有。是否有任何内置函数来删除Java中String的单个字符? 像这样: 问题答案: 你也可以使用可变的类。 它具有方法deleteCharAt(),以及许多其他mutator方法。 只需删除需要删除的字符,然后得到结果,如下所示: 这样可以避免创建不必要的字符串对象。
问题内容: 我有一个来自UI的字符串,其中可能包含控制字符,并且我想删除除 回车符 , 换行符 和 制表 符之外的所有控制字符。 现在,我可以找到两种删除所有控制字符的方法: 1-使用番石榴: 2-使用正则表达式: 问题答案: 如果要删除其他字符或控制uni-code类别中的所有字符,可以执行以下操作 注意: 实际上,这实际上从字符串中除去了(\ u008f)Unicode字符,而不是转义的形式“