现在的位置: 首页 > 综合 > 正文

黑马程序员 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个

2014年09月05日 ⁄ 综合 ⁄ 共 1810字 ⁄ 字号 评论关闭

----------------------
ASP.Net+Unity开发
.Net培训、期待与您交流! ----------------------

第一种:

package it.cast.demo;

import java.io.IOException;
public class Demo3 {
/**
* @param args
* 题目:
*     编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,
*     但要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,
*     应该输出“我ABC”,而不是“我ABC+汉的半个”。
* 思路:
*     1、定义一个字符
*     2、将字符串转换成字节数组(GBK码)
*     3、定义一个方法用来判断应截取多少位
*     4、定义一个变量count存负数的个数,
*     5、计算负数的个数
*     6、判断负数奇偶,如果为偶:说明有完整的汉字,如果为奇:说明最后一个字只有一半
* @throws IOException 
*/
public static void main(String[] args) throws IOException {
String str="我ABC汉DEF";
int num=getString(str.getBytes("GBK"),8);
String substr=str.substring(0, num);
System.out.println(substr);
}
public static int getString(byte[] bytes, int i) {
int count=0;
for(int x=0;x<i;x++){
if(bytes[x]<0){
count++;
}
}
if(count%2!=0){
return i-(count+1)/2;//因为要取出的是字符,所以要考虑取出的位数:
                                 //比如 HM黑马,按字节算有6位,但按字符算只有4位,
                                 //字符中汉字只算一位,字节中汉字算二位
}
return i-count/2;
}

}

----------------------------------------------------------------------------------------------------------------------------------------

      第二种:

      publicstatic void main(String[] args) throws Exception{

              Stringstr = "我a爱中华abc我爱传智def';

              Stringstr = "我ABC汉";

              intnum = trimGBK(str.getBytes("GBK"),5);

              System.out.println(str.substring(0,num));

       }

      

       publicstatic int  trimGBK(byte[] buf,int n){

              intnum = 0;

              booleanbChineseFirstHalf = false;

              for(inti=0;i<n;i++)

              {

                     if(buf[i]<0&& !bChineseFirstHalf){

                            bChineseFirstHalf= true;

                     }else{

                            num++;

                            bChineseFirstHalf= false;                         

                     }

              }

本题主要考的是编码的特征,要仔细读题,否则一定会出错。

----------------------
ASP.Net+Unity开发
.Net培训、期待与您交流! ----------------------

详细请查看:www.itheima.com

抱歉!评论已关闭.