怎样区分中文英文和特殊字符????
在java中有个字符串 "我的编号是123-44(男),呵呵""123我的编号是123-44(男),呵呵" 这两句中如何动态取出中文“我的编号是”"男"。
不是找到第几个字符截取那种.是根据找到这两句中的中文去出来。
谢谢先!!!
问题点数:10、回复次数:16Top
1 楼singedcat(以夢為馬)回复于 2005-02-16 12:02:27 得分 0
新春愉快!Top
2 楼ybt631(默默耕耘!)回复于 2005-02-16 12:17:19 得分 3
for(int i=0;str[i]!='\0';i++)
if(str[i]<0)
{System.out.println(str[i]+str[i+1]);
i++;
}
汉字就是由2个负数(每个数一个字节)组成的Top
3 楼ybt631(默默耕耘!)回复于 2005-02-16 12:22:55 得分 0
忘了
也祝大家新年愉快
第一次来这,希望大家多多关照Top
4 楼chongchonglong(SMFL)回复于 2005-02-16 12:48:44 得分 0
给大家也拜个晚年。。。。!!!!!!!!!!
Top
5 楼chongchonglong(SMFL)回复于 2005-02-16 13:18:51 得分 0
可是怎样把string类型的弄成str[i]啊。偶不太会啊。呵呵。Top
6 楼Chinatosun(继续努力 UML系统分析 )回复于 2005-02-16 13:24:01 得分 0
gzTop
7 楼007james(苏乞儿)回复于 2005-02-16 13:32:09 得分 0
学习中...Top
8 楼chongchonglong(SMFL)回复于 2005-02-16 14:07:42 得分 0
自己顶。。。Top
9 楼cslyaoyao(笑对人生)回复于 2005-02-16 15:24:27 得分 5
我刚帮你测了一把,可以实现,你自己参考一下,只是我不明白为什么将字符串以"Unicode"形式转成字节数组后,前两个字节的内容会是-1,-2 .
public class test{
public static void main(String[] args) throws Exception{
String str1 = "我的编号是123-44(男)";
String str2 = "123我的编号是123-44(男)";
System.out.println(str1 + " 中的中文文字为:" + getChineseCharacter(str1));
System.out.println(str2 + " 中的中文文字为:" + getChineseCharacter(str2));
}
public static String getChineseCharacter(String str) throws Exception{
StringBuffer outStr = new StringBuffer();
byte[] bytes = str.getBytes("Unicode");
byte[] tmp = new byte[4];
int i = 0;
int len = bytes.length;
tmp[0] = -1;
tmp[1] = -2;
for ( i = 2 ; i <= ( len - 2 ) ; i += 2){
if ( bytes[i+1] != 0 ){
tmp[2] = bytes[i];
tmp[3] = bytes[i+1];
outStr.append(new String(tmp,"Unicode"));
}
}
return outStr.toString();
}
}Top
10 楼ybt631(默默耕耘!)回复于 2005-02-16 15:26:03 得分 0
这个我也不太会,不知道java里面String类是怎么会事。
以前是学c/c++的,最近才开始学的java,想选择一个网上能现下现用的java编译器
谁能推荐推荐。
Top
11 楼cslyaoyao(笑对人生)回复于 2005-02-16 15:33:48 得分 0
还有最好的一种转换方法:
public static String getChineseCharacter(String str) throws Exception{
StringBuffer outStr = new StringBuffer();
byte[] bytes = str.getBytes();
byte[] tmp = new byte[2];
int i = 0;
for ( i = 0 ; i < bytes.length; i ++ ){
if ( bytes[i] < 0 ){
tmp[0] = bytes[i];
tmp[1] = bytes[++i];
outStr.append(new String(tmp));
}
}
return outStr.toString();
}
另外:ybt631(需要拼命) 回复的把两个字节直接加起来是不行的,为什么的话自己想罗Top
12 楼chongchonglong(SMFL)回复于 2005-02-16 16:05:41 得分 0
cslyaoyao(笑对人生)
谢谢你了。
你说的那个-1,-2 是不是你用了tmp[1]=-1 tmp[2]=-2 。而后的复值是用到了tmp[3]timp[4]身上。
输出的可就是tmp了。
我的机器现在每法实验。回家后偶在试试。不过我看可以的。只是对于
StringBuffer outStr = new StringBuffer();
outStr.append(new String(tmp));
我还不懂。合乎。以前没有用过的嘛。Top
13 楼cslyaoyao(笑对人生)回复于 2005-02-16 16:40:30 得分 0
就是往 outStr 的字符串最后加一个新的字符串了,比单位的两个String相加效果高。Top
14 楼ybt631(默默耕耘!)回复于 2005-02-16 18:25:03 得分 0
to:cslyaoyao(笑对人生)
为什么不行??
请注意我的程序:
for(int i=0;str[i]!='\0';i++)
if(str[i]<0)
{System.out.println(str[i]+str[i+1]);
i++;//这个地方
}
防止了相邻2个汉字的头尾相连组成一个不同的汉字。Top
15 楼ETUFO(诺)回复于 2005-02-16 20:51:09 得分 2
String s="我的编号是123-44(男),";
char[] cs=s.toCharArray();
StringBuffer sb=new StringBuffer();
for(int i=0;i<cs.length;i++){
if(cs[i]<127) continue;
sb.append(csf[i]);
}
s=sb.toString();
现在s就是你想要的字符串了。
Top
16 楼chongchonglong(SMFL)回复于 2005-02-17 09:49:27 得分 0
cslyaoyao(笑对人生)谢谢.试验了下.正确.
ETUFO(诺) 谢谢.你的方法好像也是不显示.
ybt631(需要拼命) 谢谢.下面是我按你的方法做的试验.呵呵.可能方法不对.不过没有显示.我也不知道为什么.你和(诺)我用的输出显示是一样的.是不是那里有问题了.判断是否是中文这个地方是没有问题了.不一样的就是(笑对人生)用的是.append(new String(str))了.
大家帮忙试试是什么问题了.呵呵.
public class text{
public static void main(String[] args) throws Exception{
String str1 = "我的编号是123-44(男)";
String str2 = "123我的编号是123-44(男)";
System.out.println(str1 + " 中的中文文字为:" + getChineseCharacter(str1));
System.out.println(str2 + " 中的中文文字为:" + getChineseCharacter(str2));
}
public static String getChineseCharacter(String st) throws Exception{
StringBuffer br=new StringBuffer();
char[] str=st.toCharArray();
for(int i=0;i<str.length;i++)
if(str[i]<0)
{
br.append(str[i]+str[i+1]);
i++;//这个地方
}
return br.toString();
}
}Top




