A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

兄弟姐妹们好:这是我第一次发帖子,写得不好让大家见笑了,如果有什么意见都可以说,只有知道了自己的缺点才能进步!
刚开始写的时候我想复杂了,编码问题和在判断是否为字符还是中文的时候也错了但后来一步一步调试改正了,下面我就一步一步的跟大家说下这题吧
思路,1. 从键盘录入一个字符串和要截取的字节长度,并将字符串和截取字节长度作为参数传到要写的截取函数中并返回一个字符串的结果
          2. 将接收到的字符串转换为字节数组,获取字节数组的长度,判断字节数组中的字节是否为中文,英文和数字。
遇到的问题:1.如何知道字节数组里面是不是中文,但我通过调试发现中文的全都是两个负数所以通过这个我做了个判断是不是中文或者半个中文,英文和数字是正数这个我知道 中文为什么是负数忘大神们指教下,
下面是我写的代码:

package heima;
import java.io.UnsupportedEncodingException;
import java.nio.Buffer;
import java.util.Scanner;
public class Title10 {
/**
  * 编写函数,从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表),例如:从“
  * HM程序员”中截取2个字节是“HM”,截取4个则是“HM程”,截取3个字节也要是"HM"而不要出现半个中文
  * @param args
  */
public static void main(String[] args) {
  
  String str =null;
  int length =0;
  Scanner sc = new Scanner(System.in);
  System.out.println("请输入字符串");
  str = sc.nextLine();
  System.out.println("请输入截取长度");
  length = sc.nextInt();
  Title10  test = new Title10();
  str = test.splitString(str, length);
  System.out.println("截取后的字符串 :"+str);
  

}
/**
  * 字符串的截取并不能出现半个中文
  * @param str
  * @param length
  * @return
  */
public String splitString(String str,int length){
  byte[] buff = null;
  int bufflen = 0;
  int spllen =0;
  System.out.println(str);
  try {
   buff = str.getBytes("GBK");
  } catch (UnsupportedEncodingException e) {
   e.printStackTrace();
  }
  
  bufflen = buff.length;
  System.out.println("字符长度 :"+bufflen);
  if( length>bufflen || length<= 0 ){
   return "您输入的数字不合理";
  }

  boolean istrue = true;;
  for(int i =0; i<length; i++){
   
   if( buff[i]>0 ){
    spllen =i;
    continue;
   }
   
      if(buff[i]<0  ){
      
       if(istrue){
           istrue=false;
        spllen=i-1;
       }
       else{
        istrue=true ;
        spllen=i;
       }
      }
  }
  System.out.println("截取实际字符长度 :"+(spllen+1));
  byte[] newbyte = new byte[spllen+1];
  for(int i =0; i<=spllen; i++){
   newbyte[i] = buff[i];
  }

  String newstr =null;
  try {
   newstr = new String(newbyte, "GBK");
  } catch (UnsupportedEncodingException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return newstr;
}
}


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马