本帖最后由 as604049322 于 2015-5-29 18:52 编辑
感觉楼上的方法好垃圾,一点算法效率都没有。。
其次楼主一定要说清楚是什么编码表,在unicode编码中英文汉字都是两字节,而最前面有标识符。如果只是针对GBK的编码,这题就很简单,代码如下:今天再次看自己的代码感觉还是垃圾,于是修改成这样,修改后的代码(最下面有修改前的代码):
- package juni.test;
- import java.util.Scanner;
- class Test
- {
- public static void main(String[] args) throws Exception
- {
- /*编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是
- 要保证汉字不被截半个,如"我 ABC"4,应该截为"我 AB",输入"我 ABC 汉 DEF",6,应该输出为"我
- ABC"而不是"我 ABC+汉的半个"。*/
- Scanner sc=new Scanner(System.in);
- while(true){
- System.out.println("请输入要转换的字符序列:");
- String str=sc.nextLine();
- if(str.equals("over"))
- break;
- System.out.println("请输入要截取的个数:");
- int len=Integer.parseInt(sc.nextLine());
- String result=subStringForm(str,len);
- System.out.println(result);
- }
- }
- public static String subStringForm(String str,int len) throws Exception{
- byte[] bytes=str.getBytes("gbk");
- if(len>bytes.length)
- len=bytes.length;
- int count=0;
- for(int i=len-1;i>=0;i--){
- if(bytes[i]>0)
- break;
- count++;
- }
- if(count%2==0)
- return new String(bytes,0,len,"gbk");
- return new String(bytes,0,len-1,"gbk");
- }
- }
复制代码
修改前:
- public static String subStringForm(String str,int len) throws Exception{
- byte[] bytes=str.getBytes("gbk");
- if(bytes[len-1]>0)
- return new String(bytes,0,len,"gbk");
- int count=0;
- for(int i=0;i<len;i++){
- if(bytes[i]<0)
- count++;
- }
- if(count%2==0)
- return new String(bytes,0,len,"gbk");
- return new String(bytes,0,len-1,"gbk");
- }
复制代码
|