我编写了以下函数来删除无法在iso88591中表示的字符串中的字符:
public static String convert(String str) {
if (str.length()==0) return str;
str = str.replace("–","-");
str = str.replace("“","\"");
str = str.replace("”","\"");
return new String(str.getBytes(),iso88591charset);
}
我的问题是这没有我需要的行为。 当遇到没有表示的字符时,它会转换为多个字节。我希望从结果中省略该字符。
我还想以某种方式不必拥有所有替换命令。
我一直在研究charsetEnocder。它有如下方法:
CharsetEncoder encoder = iso88591charset.newEncoder();
encoder.onMalformedInput(CodingErrorAction.IGNORE);
encoder.onUnmappableCharacter(CodingErrorAction.IGNORE);
这似乎是我想要的,但是我甚至没有使用charset编码器编写一个模仿我已经拥有的函数,但却单独设置了这些选项。
我也受限于Java 6 :(
更新: 我想出了一个讨厌的解决方案,但必须有一个更好的方法来做到这一点:
public static String convert(String str) {
if (str.length()==0) return str;
str = str.replace("–","-");
str = str.replace("“","\"");
str = str.replace("”","\"");
String str2 = "";
for (int c=0;c<str.length();c++) {
String cur = (new Character(str.charAt(c))).toString();
if (cur.equals(new String(cur.getBytes(),iso88591charset))) str2 += cur;
}
return new String(str2.getBytes(),iso88591charset);
}
答案 0 :(得分:1)
一种可能的方式可能是
rev 1000
rev 1001
..
rev 1008
...
rev 1011
...
rev 1015
输出
1000