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();
}
}
運行效果偶數截取沒問題,奇數截取還有點問題希望大家指正
Java項目中定時任務之Quartz的應用 http://www.linuxidc.com/Linux/2013-12/94443.htm
編寫高質量代碼 改善Java程序的151個建議 PDF高清完整版 http://www.linuxidc.com/Linux/2014-06/103388.htm
Java 8簡明教程 http://www.linuxidc.com/Linux/2014-03/98754.htm
Java對象初始化順序的簡單驗證 http://www.linuxidc.com/Linux/2014-02/96220.htm
Java對象值傳遞和對象傳遞的總結 http://www.linuxidc.com/Linux/2012-12/76692.htm
Java對象序列化ObjectOutputStream和ObjectInputStream示例 http://www.linuxidc.com/Linux/2012-08/68360.htm