导航:首页 > 编程语言 > java截取中文字符

java截取中文字符

发布时间:2024-04-24 00:48:02

java截取指定字符串中的某段字符如何实现

如下图,给你贴出了代码段。可以利用字符串的substring函数来进行截取。

结果是:456789(注意:包括4。)

示例:

"hamburger".substring(3,8) returns "burge"

"smiles".substring(0,5) returns "smile"

㈡ 求截取带中文的字符串的java方法。

楼主你好,很高兴能回答你这个很有挑战性的问题,首先我谈谈我对上面9个例子的理解,即这个方法应该实现的功能:

这个方法与JDKString原有的方法substring是有区别的,在这个方法里,一个中文汉字相当于占2个英文字符的位置。而且根据方法传入的参数pStart和pEnd在返回相应的子字符串child

如果pstart刚好在某个汉字的前半部分,则child应包含该汉字,在后部分则不含。与之相对应的是pEnd如果在某个汉字的后半部分,则child应含该汉字,否则不包含,如果pStart超出pStr的长度(这里一个汉字长度算2),则返回空,其他性质和JDK的性质形同。

如果觉得我的理解不错,且看下面的代码:

publicclassTest{

publicTest(){

Stringstr="ABCDE";

Stringstr2="ABC你D";

Stringstr3="A你B好C吗勇DE";

System.out.println("1str='ABCDE'start=1end=5结果:"+getSubString(str,1,5));

System.out.println("2str='ABCDE'start=1end=4结果:"+getSubString(str,1,4));

System.out.println("3str='ABCDE'start=2end=4结果:"+getSubString(str,2,4));

System.out.println("4str='ABCDE'start=6end=7结果:"+getSubString(str,6,7));

System.out.println("5str='ABCDE'start=5end=5结果:"+getSubString(str,5,5));

System.out.println("6str2='ABC你D'start=1end=3结果:"+getSubString(str2,1,3));

System.out.println("7str2='ABC你D'start=1end=4结果:"+getSubString(str2,1,4));

System.out.println("8str2='ABC你D'start=1end=5结果:"+getSubString(str2,1,5));

System.out.println("9str2='ABC你D'start=4end=4结果:"+getSubString(str2,4,4));

System.out.println("10str3='A你B好C吗勇DE'start=9end=10结果:"+getSubString(str3,9,10));

}

publicstaticvoidmain(Stringargs[]){

newTest();

}

publicStringgetSubString(Stringstr,intpstart,intpend){

Stringresu="";

intbeg=0;

intend=0;

intcount1=0;

char[]temp=newchar[str.length()];

str.getChars(0,str.length(),temp,0);

boolean[]bol=newboolean[str.length()];

for(inti=0;i<temp.length;i++){

bol[i]=false;

if((int)temp[i]>255){//说明是中文

count1++;

bol[i]=true;

}

}

if(pstart>str.length()+count1){

resu=null;

}

if(pstart>pend){

resu=null;

}

if(pstart<1){

beg=0;

}else{

beg=pstart-1;

}

if(pend>str.length()+count1){

end=str.length()+count1;

}else{

end=pend;//在substring的末尾一样

}

//下面开始求应该返回的字符串

if(resu!=null){

if(beg==end){

intcount=0;

if(beg==0){

if(bol[0]==true)

resu=null;

else

resu=newString(temp,0,1);

}else{

intlen=beg;//zheli

for(inty=0;y<len;y++){//表示他前面是否有中文,不管自己

if(bol[y]==true)

count++;

len--;//想明白为什么len--

}

//for循环运行完毕后,len的值就代表在正常字符串中,目标beg的上一字符的索引值

if(count==0){//说明前面没有中文

if((int)temp[beg]>255)//说明自己是中文

resu=null;//返回空

else

resu=newString(temp,beg,1);

}else{//前面有中文,那么一个中文应与2个字符相对

if((int)temp[len+1]>255)//说明自己是中文

resu=null;//返回空

else

resu=newString(temp,len+1,1);

}

}

}else{//下面是正常情况下的比较

inttemSt=beg;

inttemEd=end-1;//这里减掉一

for(inti=0;i<temSt;i++){

if(bol[i]==true)

temSt--;

}//循环完毕后temSt表示前字符的正常索引

for(intj=0;j<temEd;j++){

if(bol[j]==true)

temEd--;

}//循环完毕后temEd-1表示最后字符的正常索引

if(bol[temSt]==true)//说明是字符,说明索引本身是汉字的后半部分,那么应该是不能取的

{

intcont=0;

for(inti=0;i<=temSt;i++){

cont++;

if(bol[i]==true)

cont++;

}

if(pstart==cont)//是偶数不应包含,如果pstart<cont则要包含

temSt++;//从下一位开始

}

if(bol[temEd]==true){//因为temEd表示substring的最面参数,此处是一个汉字,下面要确定是否应该含这个汉字

intcont=0;

for(inti=0;i<=temEd;i++){

cont++;

if(bol[i]==true)

cont++;

}

if(pend<cont)//是汉字的前半部分不应包含

temEd--;//所以只取到前一个

}

if(temSt==temEd){

resu=newString(temp,temSt,1);

}elseif(temSt>temEd){

resu=null;

}else{

resu=str.substring(temSt,temEd+1);

}

}

}

returnresu;//返回结果

}

}

测试结果如图,并且可以任意修改字符串,保证结果正确。

That'sall!

阅读全文

与java截取中文字符相关的资料

热点内容
代码编译后叫什么 浏览:969
电脑文件夹做了保护怎么删除 浏览:678
php数据库连接全局 浏览:528
葫芦岛有程序员吗 浏览:986
小胖机器人显示无命令 浏览:775
一日一画pdf 浏览:97
编程猫拔萝卜文字评价模板 浏览:252
cmdjava命令 浏览:237
扫描版pdf转文字版 浏览:534
单片机专用寄存器 浏览:499
学习python的手册 浏览:676
vue编译成js文件 浏览:90
给单片机供电的电池 浏览:341
什么app是分享教育的 浏览:899
可视化编程java 浏览:83
人工智能温控器算法 浏览:377
大号文件夹多少钱一个 浏览:573
pdf阅读器打开文件 浏览:99
winrar解压日文文件 浏览:39
什么app可以看广东珠江电视台 浏览:76