第三题:
import java.io.*;public class SplitString 
{
private int byteNum;
private String split;

public SplitString(String s,int Byte)
{
split=s;
byteNum=Byte;
}

public void Split()
{       
byte[]num=split.getBytes();
              //取得字节数,两个字节的编码构成一个汉字,且其内码为负值;
int i=num.length;
if(byteNum>=i) System.out.println(split);
else
if(byteNum==1)
{
if(num[byteNum-1]<0)
{
System.out.println(new String(num,0,byteNum+1));
}
else
System.out.println(new String(num,0,byteNum));
}
else if(byteNum>1)
{
if(num[byteNum-1]<0)
{
if(num[byteNum-2]<0) 
System.out.println(new String(num,0,byteNum-2));
else
System.out.println(new String(num,0,byteNum-1));
}
else
System.out.println(new String(num,0,byteNum));
}
}

public static void main(String []args)
{
SplitString aa=new SplitString("我123汉",6);//输入字符串和字节数
aa.Split();
}
}

解决方案 »

  1.   

    二楼的if和else看得头晕哦
    能说一下不
      

  2.   

    上面的程序是错误的,有个bug现在给出正确的答案
    import java.io.*;public class SplitString
    {
    private int byteNum;//分割的字节数
    private String split;//将要分割的字符串
    private int oddnum=0; public SplitString(String s,int Byte)
    {
    split=s;
    byteNum=Byte;
    } public void Split()
    {
    byte[]num=split.getBytes();
            //取得字节数,两个字节的编码构成一个汉字,且其内码为负值;
            //String .getBytes()返回一个byte[]类型的变量,其内容为String的每个字符的ASCII码,其中
            //汉字为2个字节的编码,均为负值。 int i=num.length;
    for(int j=0;j<i;j++)
    {
    System.out.println(num[j]);
    } if(byteNum>=i)
    System.out.println(split);//如果要求的字节数目超过了该字符串的字节数目,则输出原字符串
    else if(byteNum==1)
    {
    //如果要求截断的字节数为1,首先判断getBytes()得到的数组的第一个元素是正还是负
    if(num[byteNum-1]<0)
    {
    System.out.println(new String(num,0,byteNum+1));
    }
    else
    System.out.println(new String(num,0,byteNum));
    }
    else if(byteNum==2)
    {
    if(num[1]<0)
    {
    if(num[0]<0)
    {
    System.out.println(new String(num,0,2));
    }
    else
    {
    System.out.println(new String(num,0,1));
    }
    }
    else
    {
    System.out.println(new String(num,0,2));
    }
    }
    else if(byteNum>2)
    {
    //如果要求截断的字节数大于1
    if(num[byteNum-1]<0)
    {
    if(num[byteNum]<0)
    {
    //判断从0到第byteNum-1的负值的个数是奇数还是偶数
    for(int j=0;j<byteNum;j++)
    {
    if(num[j]<0)
    {
    oddnum++;
    }
    }
    System.out.println("oddnum is "+oddnum);
    if(oddnum%2==0)
    { System.out.println(new String(num,0,byteNum));
    }
    else
    {
    System.out.println(new String(num,0,byteNum-1));
    }
    }
    else
    {
    System.out.println(new String(num,0,byteNum));
    }
    }
    else
    System.out.println(new String(num,0,byteNum));
    }
    } public static void main(String []args)
    {
    SplitString aa=new SplitString("我1是谁123汉",3);//输入字符串和字节数
    aa.Split();
    }
    }