判断一下那些是中文,去除不是的就好了就好了呗,具体什么编码 你去看实际情况 转一下就好了 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("快乐的中国人"));
}
}
结果输出:快的中国人
{
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("快乐的中国人"));
}
}
结果输出:快的中国人
解决方案 »
- oracle 字符串存储问题??
- 最近开发了一个OA系统,Struts+JAVA+AJax,共同学习、共同进步!
- (一道面试题)设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
- java如何连接db2
- 关于线程的问题!急等!
- 使用FileReader类、LineNumberReader类是否只能抛出IOException,不能抛出自定义类,请详细解释!
- 拷贝专家的原代码怎么运行不了?请斑竹及爱好者近来看看!不甚感激!!!
- POP3取HTML格式的邮件问题.那位老兄能帮我指点呢..
- 有个问题:JDBC 连接 ORACLE哪有资料下载?
- 98下配置TOMCAT的问题(在线)
- 关于字节流和字符流的一点小疑问
- 泛型问题:请教如下代码为什么会编译不通过?
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 = "快乐的中国人";
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);// 调用方法把"乐" 转换成 "乐"....
result = change + temp1 + result;// 形成新的字符串。
endP = intP[0];
}
result = s.subSequence(0, endP) + result;
return result;
} /**
* 把类似 "乐"字符串, 转换成 "乐"等汉字形式。
*
* @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;
}
}
StringBuilder rs = new StringBuilder();
String str = "快乐的中国人";
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);
最终是用的apache的common包. 因为项目其他地方也一直用这个包.System.out.println(org.apache.commons.lang.StringEscapeUtils.StringEscapeUtils.unescapeHtml("快乐的中国人"));