短信分割算法(以长度分割)
来源:互联网 发布:三国全面战争吕布数据 编辑:程序博客网 时间:2024/05/22 10:33
/**
* 以给定的<code> LENGTH </code>分割短信内容,返回分割后的字符串数组<br>
* 以下是返回内容示例:
*
* <pre>
* sSMS = “abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz”;
* 1. 分割后的短信个数 < 10
* LENGTH = 10;
* (1/6)abcdefghij
* (2/6)klmnopqrst
* (3/6)uvwxyzabcd
* (4/6)efghijklmn
* (5/6)opqrstuvwx
* (6/6)yz = 7
*
* 2. 分割后的短信个数 >= 10
* LENGTH = 5;
* (1/15)abcd
* (2/15)efgh
* (3/15)ijkl
* ......
* (13/15)tuv
* (14/15)wxy
* (15/15)z
* </pre>
*
* @param sSMS
* 短信内容
* @param LENGTH
* 每条短信的长度
* @return 一组短信内容
*/
public static String[] smsSplit(String sSMS, final int LENGTH) {
int iContentLength = sSMS.trim().length();
if (LENGTH >= iContentLength) {
// 短信内容的长度小于等于LENGTH,不用分割直接返回
return new String[] { sSMS };
}
final int iSMS_Num_9 = 9; // 分割9条短信
int iSum = LENGTH * iSMS_Num_9; // 短信条数等于9的总长度,
int iLength = 0;
if (iContentLength > iSum) {
// 源短信的长度大于iSum,表示源短信可以被分割的数量超过10条
iLength = LENGTH - 1;
iSum = iLength * iSMS_Num_9;
} else if (iContentLength < iSum) {
// 源短信的长度小于iSum,表示源短信可以被分割的数量小于等于9条
iLength = LENGTH;
iSum = iContentLength;
}
// 短信个数小于10
String sSMS9 = sSMS.trim().substring(0, iSum);
String[] aSMS9 = smsSplitByLength(sSMS9, iLength);
if (iContentLength == iSum) {
List<String> oList = new ArrayList<String>();
String sTemp;
final int iSMSNum = aSMS9.length;
for (int i = 0; i < aSMS9.length; i++) {
sTemp = "(" + (i + 1) + "/" + iSMSNum + ")" + aSMS9[i];
oList.add(sTemp);
}
String[] aSMS = oList.toArray(new String[0]);
return aSMS;
}
String sTemp1 = aSMS9[aSMS9.length - 1];
String sTemp2 = aSMS9[aSMS9.length - 2];
String sSMS10 = null;
String[] aSMS10 = null;
if (sTemp1.length() != sTemp2.length()) {
String[] aTemp = aSMS9;
aSMS9 = new String[aTemp.length - 1];
System.arraycopy(aTemp, 0, aSMS9, 0, aTemp.length - 1);
sSMS10 = sTemp1 + sSMS.trim().substring(iSum);
aSMS10 = smsSplitByLength(sSMS10, iLength - 1);
} else {
sSMS10 = sSMS.trim().substring(iSum);
aSMS10 = smsSplitByLength(sSMS10, iLength - 1);
}
List<String> oList = new ArrayList<String>();
String sTemp;
final int iSMSNum = aSMS9.length + aSMS10.length;
for (int i = 0; i < aSMS9.length; i++) {
sTemp = "(" + (i + 1) + "/" + iSMSNum + ")" + aSMS9[i];
oList.add(sTemp);
}
for (int i = 0; i < (aSMS10.length); i++) {
sTemp = "(" + (i + 10) + "/" + iSMSNum + ")" + aSMS10[i];
oList.add(sTemp);
}
String[] aSMS = oList.toArray(new String[0]);
return aSMS;
}
/**
* 以给定的<code> LENGTH </code>分割短信内容,返回分割后的字符串数组<br>
* <b>注意:返回数组中的最后一个元素的字符串长度不一定等于<code> LENGTH </code>,<br>
* 即不考虑<code> sSMS.length % LENGTH != 0 </code></b>
*
* @param sSMS
* 短信内容
* @param LENGTH
* 每条短信的长度
* @return 一组短信内容
*/
private static String[] smsSplitByLength(String sSMS, final int LENGTH) {
int iContentLength = sSMS.trim().length();
String sTemp;
int x = 0;
int y = 0;
List<String> l = new ArrayList<String>();
while (true) {
y = x + LENGTH;
if (y > iContentLength)
y = iContentLength;
sTemp = sSMS.substring(x, y);
l.add(sTemp);
x = y;
if (x == iContentLength)
break;
}
return l.toArray(new String[0]);
}
- 短信分割算法(以长度分割)
- 短信分割
- 按长度分割字符串
- 图像分割--金字塔分割算法
- C# 以字符串分割
- java字符串以|分割
- 分割
- 分割
- 分割
- 分割
- 分割
- 分割
- 分割
- 正则字符串长度分割字符串
- php 分割固定长度标题
- android发短信实现短信分割
- 发送短信之分割短信 SMSManager
- 字符串以指定符号分割
- 产生 java.lang.NoClassDefFoundError 的另一种意外情况:jar包部分的物理性损坏
- 《给初学者的Windows Vista的补遗手册》之031
- 在北邮做《开源中国说》演讲
- 产品开发初期测试人员应该做什么?
- javascript验证不为空
- 短信分割算法(以长度分割)
- 下载 XmlLite ( 包括:xmlLite.h , xmlLite.lib , xmlLite.dll )
- 超轻量级MVC框架的设计和实现 (2)
- 产生 java.lang.NoClassDefFoundError 的另一种意外情况:jar包部分的物理性损坏
- Windows Embedded从入门到精通12月预告
- Windows Embedded CE 6.0开发初体验(四)跑个应用程序先
- Spring 2.5 Perfomance Improvements 200% 直逼 Guice
- 下载 XmlLite ( 包括:xmlLite.h , xmlLite.lib , xmlLite.dll )
- 《给初学者的Windows Vista的补遗手册》之030