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)”是什么意思?
我们将非常感谢您的帮助!
答案 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
,则可以看到值。
中文字符的值为:
如果您查看下面的ASCII表格,可以看到您提供的代码会过滤掉)
到~
答案 2 :(得分:0)
这会循环遍历每个字符,如果ASCII表上的字符在40到127之间,则仅附加到StringBuffer
。
因此,您的print语句只会打印以下字符:
)* +, - 。 / 0-9 :; &LT; =&gt; ? @ A-Z ^ _&#39; a-z {| }〜
请注意,您要排除(
和DEL
(由于从41开始到126结束)