黑马程序员技术交流社区

标题: 关于入学基础测试题的一个问题 [打印本页]

作者: 齐银春    时间: 2012-11-24 18:39
标题: 关于入学基础测试题的一个问题
虽说最后弄出来了 可我再次用gbk解码编码 当截取六个字节时总是无法截取完整  请大家帮忙看一下有什么错误
import java.io.UnsupportedEncodingException;

public class Test10 {

        /**
         * 10、 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。
         * 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,
         * 6,应该输出为“我ABC”而不是“我ABC+汉的半个”
         *
         * @param args
         * @throws Exception
         */
        private static String cutString(String str,int index) throws Exception{
                byte[] buf=str.getBytes("gbk");
                int count=0;
                for(int x=index;x>=0;x--){
                        if(buf[x]<0)
                                count++;
                        else
                                break;
                }
                if(count%2==0)
                        return new String(buf,0,index,"gbk");
                else
                        return new String(buf,0,index-1,"gbk");
                       
               
        }
        public static void main(String[] args) throws Exception {
                String str="我ABC汉DEF";
                String str1=cutString(str,6);
                System.out.println(str1);

        }

}



作者: 潘天功    时间: 2012-11-24 20:19
我以前写过的、你看看吧,也许有用
import java.util.Scanner;
/*
编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。
但是要保证汉字不被截取半个,如“我ABC”4,应该截取为“我AB”,输入“我ABC汗DEF”,6,应该输出为“我ABC”,而不是“我ABC+汗的半个字”。
*/
public class JieQu
{
        public static void main(String[] args){
            Scanner sc = new Scanner(System.in);
                System.out.println("输入要截取的字符:");
                String str =sc.nextLine();
                System.out.println("输入要截取的长度:");
                int num = sc.nextInt();
                Substring substr = new Substring(str,num);
                substr.splitit();
        }
}
class Substring
{
        private String str;//要截取的字符
        private int bytenum;//截取个数
        public Substring(){}
    public Substring(String str,int bytenum){
            this.str = str;
                this.bytenum = bytenum;
        }
        public void splitit(){
             byte[] bt = str.getBytes();
                 System.out.println("字符串的长度为:"+bt.length);
                 if(bytenum>1){
                       if(bt[bytenum]<0){
                     //调用String方法的默认字符集解码byte 子数组,构造一个新的 String
                                 String substrx = new String(bt,0,--bytenum);
                                                 System.out.println(substrx);
                           }
                           else{
                                  String substrex = new String(bt,0,bytenum);
                      System.out.println(substrex);
                           }
                 }
                 else{
                         if(bytenum==1){

                                           if(bt[bytenum]<0)
                                                        {
                                                                String substr1=new String(bt,0,++bytenum);
                                                                System.out.println(substr1);
                                                        }
                                                        else
                                                        {
                                                                String substr2=new String(bt,0,bytenum);
                                                                System.out.println(substr2);
                                                        }
                                        }
                                        else
                                        {
                                                System.out.println("输入错误!!!请输入大于零的整数:");
                                        }
                          }
           }
}


作者: 齐银春    时间: 2012-11-24 21:50
潘天功 发表于 2012-11-24 20:19
我以前写过的、你看看吧,也许有用
import java.util.Scanner;
/*

这个我用utf-8正常 但gbk有时候会出错  你的也应该是默认gbk编码的吧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2