java 面试中的一道截取字符串的经典题目

特此申明,本文原文出自http://www.dnbcw.com/biancheng/java/msij202835.html
小菜发现代码有严重的bug,特此修复,并写出了较完整的代码
在原来的代码中,如果输入的汉子是连续的:
如:我A结束BC汉DEF 那么截取第5个的时候,就出问题。有兴趣的同学可以看看原来的代码

下面是我修正后的代码:
package string;
class SplitString {
private String str;
private int byteNum;

public SplitString() {
}

public SplitString(String str, int byteNum) {
this.str = str;
this.byteNum = byteNum;

}

public void splitIt() {
byte bt[] = str.getBytes();
int mark=byteNum;
if (bt[byteNum]<0)
{
while (mark>-1&&bt[mark]<0 )
{
if (bt[mark]<0)
mark--;
}
mark++;
//说明连续出现的是偶数个负数
if ((byteNum-mark)/2*2==(byteNum-mark))
{
System.out.println(new String(bt,0,byteNum));
}else
{
//如果连续出现的是奇数个负数,那么就说明占用了半个汉字了
System.out.println(new String(bt,0,byteNum-1));
}
}else
{
System.out.println(new String(bt,0,byteNum));
}
}
}

public class TestSplitString {
public static void main(String args[]) {
String str = "我A结束BC汉DEF";
int num = 1;
SplitString sptstr = new SplitString(str, num);
sptstr.splitIt();
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值