特此申明,本文原文出自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();
}
}
小菜发现代码有严重的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();
}
}