for(int i=0;str[i]!='\0';i++)
if(str[i]<0) 
{System.out.println(str[i]+str[i+1]);
i++;
}
汉字就是由2个负数(每个数一个字节)组成的

解决方案 »

  1.   

    可是怎样把string类型的弄成str[i]啊。偶不太会啊。呵呵。
      

  2.   

    我刚帮你测了一把,可以实现,你自己参考一下,只是我不明白为什么将字符串以"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();
        }
    }
      

  3.   

    这个我也不太会,不知道java里面String类是怎么会事。
    以前是学c/c++的,最近才开始学的java,想选择一个网上能现下现用的java编译器
    谁能推荐推荐。
      

  4.   

    还有最好的一种转换方法:
       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(需要拼命) 回复的把两个字节直接加起来是不行的,为什么的话自己想罗
      

  5.   

    cslyaoyao(笑对人生)
    谢谢你了。
    你说的那个-1,-2 是不是你用了tmp[1]=-1 tmp[2]=-2 。而后的复值是用到了tmp[3]timp[4]身上。
    输出的可就是tmp了。
    我的机器现在每法实验。回家后偶在试试。不过我看可以的。只是对于
     StringBuffer outStr = new StringBuffer();
     outStr.append(new String(tmp));
    我还不懂。合乎。以前没有用过的嘛。
      

  6.   

    就是往 outStr 的字符串最后加一个新的字符串了,比单位的两个String相加效果高。
      

  7.   

    to:cslyaoyao(笑对人生)
    为什么不行??
    请注意我的程序:
    for(int i=0;str[i]!='\0';i++)
    if(str[i]<0) 
    {System.out.println(str[i]+str[i+1]);
    i++;//这个地方
    }
    防止了相邻2个汉字的头尾相连组成一个不同的汉字。
      

  8.   

    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就是你想要的字符串了。
      

  9.   

    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();
        }
    }