判断一下那些是中文,去除不是的就好了就好了呗,具体什么编码 你去看实际情况 转一下就好了 public class StringUtilTest
{
 public static boolean isChinese(char c) {  
  
        Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);  
  
        if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS  
  
                || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS  
  
                || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A  
  
                || ub == Character.UnicodeBlock.GENERAL_PUNCTUATION  
  
                || ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION  
  
                || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {  
  
            return true;  
  
        }  
  
        return false;  
  
    }  
  
 public static String getChineseFromStr(String strName) {  
  
        char[] ch = strName.toCharArray();  
        String result = "";
        for (int i = 0; i < ch.length; i++) {  
  
            char c = ch[i];  
  
            //如果有一个非中文,则返回错误
            if (isChinese(c) == true) {  
 
                result += c; 
            }  
        } 
        return result;
    }
public static void main(String[] args) 
    {

System.out.println(getChineseFromStr("快&#20048;的中国人"));
}
}
结果输出:快的中国人

解决方案 »

  1.   

    这个是Unicode字符实体引用。不是UTF-8编码
      

  2.   

    楼主参考:import java.io.UnsupportedEncodingException;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;public class ChangeUnicodeString {
    public static void main(String[] args) {
    String s = "快&#20048;的中国人";
    String resultString = getNewString(s);
    System.out.println("original sting is " + s);
    System.out.println("after changing it is " + resultString);
    } /**
     * 把含有unicode编码的字符串转成汉字。
     * @param s
     * @return 转换后的字符串。
     */
    public static String getNewString(String s) {
    //----------------- 定义正则匹配模式。
    String regexString = "&#\\d{1,5};";// 代表unicode字符串 的正则表达式。
    Pattern pattern = Pattern.compile(regexString);
    Matcher matcher = pattern.matcher(s); List<int[]> list = new ArrayList<int[]>();// 用于保存所有这种字符串的首位位置。
    // ----------------- 遍历字符串,确定所有的unicode字串的位置,以整数数组形式放入List里。
    while (matcher.find()) {
    int[] intPosition = new int[2];// 记录起始及结束位置。
    intPosition[0] = matcher.start();
    intPosition[1] = matcher.end();
    list.add(intPosition);
    }
    // ----------------- 开始转换
    String result = "";// 保村最终结果。
    int endP = s.length();
    for (int i = list.size() - 1; i >= 0; i--) {// 循环替换所有的unicode 字符串为汉字。 int[] intP = list.get(i);
    String temp = s.substring(intP[0], intP[1]);
    String temp1 = s.substring(intP[1], endP);
    String change = "";
    change = changeString(temp);// 调用方法把"&#20048;" 转换成 "乐"....
    result = change + temp1 + result;// 形成新的字符串。
    endP = intP[0];
    }
    result = s.subSequence(0, endP) + result;
    return result;
    } /**
     * 把类似 "&#20048;"字符串, 转换成 "乐"等汉字形式。
     * 
     * @param toBechanged
     * @return 转换后的字符串。
     */
    public static String changeString(String toBechanged) {
    String result = null;
    String s1 = toBechanged.substring(2, toBechanged.length() - 1);// 去掉"&#"和";";
    int intS1 = Integer.parseInt(s1);// 转成整数
    // ----------- 把这个代表一个unicode 字符的整数,放入一个长度为2的字节数组。
    byte[] b = new byte[2];
    b[1] = (byte) (intS1 & 0xff);
    b[0] = (byte) ((intS1 >>> 8) & 0xff);
    try {
    result = new String(b, "unicode");// 形成字符串。
    } catch (UnsupportedEncodingException uee) {
    uee.printStackTrace();
    }
    return result;
    }
    }
      

  3.   


            StringBuilder rs = new StringBuilder();
            String str = "快&#20048;的中国人";
            Pattern p = Pattern.compile("&#\\d{5};");
            Matcher m = p.matcher(str);
            int index = 0;
            while (m.find()) {
                rs.append(str.substring(index, m.start()));
                String g = m.group();
                int d = Integer.parseInt(g.substring(2, g.length() - 1));
                rs.append(new String(new byte[]{(byte) (d / 256), (byte) (d % 256)}, "utf-16"));
                index = m.end();
            }
            rs.append(str.substring(index));
            System.out.println(rs);
      

  4.   

    谢谢各位..
    最终是用的apache的common包. 因为项目其他地方也一直用这个包.System.out.println(org.apache.commons.lang.StringEscapeUtils.StringEscapeUtils.unescapeHtml("快&#20048;的中国人"));