**
* 写一个方法 String left(String str ,int n) str字符串中可能包含中文,中文是2bytes,实现的功能是
* 如:“中abc12” n=4 则该方法返回“中ab” “中abc国a” n=6 则返回“中abc”中文是一半时不返回
* @author Fee Share
*/
public class split67L {
public static String left(String str, int index){
char[] c = str.toCharArray();
int in=0;
for(int i=0;i<c.length;i++)
{
if(c[i]>255)
{
in+=2;
}else
{
in++;
}
if(in==index)
{
return(str.substring(0,i+1));
}else if(in>index)
{
return(str.substring(0,i));
}
}
return null;
}
}
我不知道255啥意思?数组c中打印出来不是int型的呀,怎么比较?是不是in只是根据题目的意思,是汉字加2是字母加一,跟自节无关?
* 写一个方法 String left(String str ,int n) str字符串中可能包含中文,中文是2bytes,实现的功能是
* 如:“中abc12” n=4 则该方法返回“中ab” “中abc国a” n=6 则返回“中abc”中文是一半时不返回
* @author Fee Share
*/
public class split67L {
public static String left(String str, int index){
char[] c = str.toCharArray();
int in=0;
for(int i=0;i<c.length;i++)
{
if(c[i]>255)
{
in+=2;
}else
{
in++;
}
if(in==index)
{
return(str.substring(0,i+1));
}else if(in>index)
{
return(str.substring(0,i));
}
}
return null;
}
}
我不知道255啥意思?数组c中打印出来不是int型的呀,怎么比较?是不是in只是根据题目的意思,是汉字加2是字母加一,跟自节无关?
这个就是把字符串转成数组。
if(c[i]>255)
判断是字母还是中文,255就是asii码我理解是
然后再来比较
不管是否定长,一定是一个具体数值,这儿比较的是数的大小,没有涉及它占几个字节。当这个数值>255时,那就是超出Ascii的范围是Unicode了。
如LS说的
char可以和int转换
一个字节是最大是255了
就是说char数组里的最大是两个字节的
小于255的就是一个字节了
也就是大家说的半角和全角了这是给大家提个醒,以后java传输字符的时候要小心
{
String s;
byte a[] = s.getBytes("GBK");
return new String(a,0,n,"GBK");
}
public static String left(String str, int index){
char[] c = str.toCharArray();//将值传递过来的字符串chr转换成字符数组
int in=0; //记录字节数,初始化为0
for(int i=0;i <c.length;i++) //循环字符数组中的元素
{
if(c[i]>255)//判断是否为中文。。中文的asc码大于255,但是中文的时候字节数加2,1个中文两个字节
{
in+=2;
}else
{
in++; //不是中文则加1 这样执行下来。得到的就是总的字节数
}
if(in==index) //当字节数==要求截取的数的时候。说明刚好读完。跳出left方法
{
return(str.substring(0,i+1)); //截取返回0-i之间的字符
}else if(in>index) //读取的时候当读到一个中文字符的时候。。这个时候字节数加2而,而要求的index字节数为in-1;这个时候应该放弃第i个字符的读取.
{
return(str.substring(0,i));//截取返回0-(i-1)之间的字符
}
}
return null;
}
} class TiaoShi
{
public static void main(String[] args)
{
split67L a=new split67L();
System.out.println(a.left("中abc国aa国aaaccdd",10));
}
}
大于255不一定是中文,中文的unicode码范围0X4E00 -----0X9FA5