如何删除java中的中文字符

时间:2018-05-16 06:49:23

标签: java

public class RemoveHZ                            //remove chinese characters
{
    public static String deal(String s){
        StringBuffer sb = new StringBuffer(s);
        StringBuffer se = new StringBuffer();    //store final results
        int l = sb.length();
        char c;
        for(int i=0; i<l; i++){                 
            c = sb.charAt(i);                   //get each char from string
            if(c>40 && c<127){                  //what does this mean?
                se.append(c);
            }
        }
        return new String(se);
    }
    public static void main(String[] args) 
    {
        System.out.println(deal("hello你好啊"));
    }
}

声明“if(c&gt; 40&amp; c&lt; 127)”是什么意思?

我们将非常感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

试试这个:

public class RemoveHZ {
    public static String deal(String s) {
        StringBuffer sb = new StringBuffer(s);
        StringBuffer se = new StringBuffer();    //store final results
        int l = sb.length();
        char c;
        for (int i = 0; i < l; i++) {
            c = sb.charAt(i);                   //get each char from string
            if (Character.UnicodeScript.of(c) != Character.UnicodeScript.HAN) {
                se.append(c);
            }
        }
        return new String(se);
    }

    public static void main(String[] args) {
        System.out.println(deal("hello你好啊"));
    }
}

另一种解决方案是使用if (!Character.isIdeographic(c)),但这也会删除其他语言中的字符。

答案 1 :(得分:0)

计算机上的每个字符都有一个值。这是因为计算机无法读取&#34;像人类一样的人物。例如,这些值存储在ASCII表中。如果您在代码中打印出c,则可以看到值。

中文字符的值为:

  • 20320
  • 22909
  • 21834

如果您查看下面的ASCII表格,可以看到您提供的代码会过滤掉)~

中的所有字符

ASCII Table

答案 2 :(得分:0)

这会循环遍历每个字符,如果ASCII表上的字符在40到127之间,则仅附加到StringBuffer

因此,您的print语句只会打印以下字符:

  

)* +, - 。 / 0-9 :; &LT; =&gt; ? @ A-Z ^ _&#39; a-z {| }〜

请注意,您要排除(DEL(由于从41开始到126结束)