import Java.util.Scanner;
/*
* 编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
*/
public class SplitString {
String SplitStr;
StringBuffer sb;
int SplitByte;
public SplitString(StringBuffer str, int bytes) {
SplitStr = str.toString();
SplitByte = bytes;
sb = str;
System.out.println("The String is:′" + SplitStr + "′;SplitBytes="
+ SplitByte);
}
public boolean isHan(char c) {
if (c > 126 || c < 0) {// 双字节字符串判断是不是汉字
return true;
} else {
return false;
}
}
public void SplitIt() {
// String temp = "";
int len = SplitStr.length();
int a = 0;// 计算汉字的个数
int b = SplitByte;// 保存截取间隔
if (SplitByte % 2 != 0)// 截取间隔如果是奇数,偶数则不需要处理
SplitByte = SplitByte - 1;
for (int i = 0; i < SplitStr.length(); i++) {
if (isHan(SplitStr.charAt(i))) {
len++;
a++;
// temp=SplitStr.substring(0,i-1)+SplitStr.charAt(i)+SplitStr.substring(i+1,len);
// System.out.println("temp"+temp);
sb.insert(i + a, " ");// 将有汉字的地方插一个空格
}
}
SplitStr = sb.toString();
System.out.println(SplitStr);
int loopCount;
loopCount = (len % SplitByte == 0) ? (len / SplitByte) : (len
/ SplitByte + 1);
System.out.println("loop " + loopCount);
for (int i = 0; i < loopCount; i++) {
String s = "";
if (i == loopCount - 1) {
s = SplitStr.substring(i * SplitByte, len).replaceAll(" ", "");// 将空格替换掉
System.out.println(s);
} else {
s = SplitStr.substring(i * SplitByte, ((i + 1) * SplitByte))
.replaceAll(" ", "");
System.out.println(s);
}
}
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入字符串:");
String str = in.nextLine();
System.out.println("请输入截取间隔:");
int len = in.nextInt();
StringBuffer sb = new StringBuffer(str);// String to StringBuffer
SplitString ss = new SplitString(sb, len);
ss.SplitIt();
}
}
运行效果偶数截取没问题,奇数截取还有点问题希望大家指正