/**
* 以给定的<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]);
}
分享到:
相关推荐
为了解决这个问题,短信被分割成多个部分,每个部分称为一个PDU(Protocol Data Unit)。 PDU编码是一种二进制表示方式,用于打包短信内容、地址信息、控制参数等。它包括了服务中心地址、短信中心号码、短信类型、...
5. **UDH(User Data Header)**:这是长短信分割后的每个片段前面的一段信息,指示了短信的总长度、片段数量以及当前片段的位置。在C/C++中,你需要理解和处理这个结构,以正确地解析和重组长短信。 6. **PDU模式...
2. **分段与重组**:如果一条短信内容过长,不能一次性发送,那么它会被自动分割成多个PDU段,每个段都包含一个顺序号,以便接收端能正确重组原始信息。 3. **地址信息**:PDU短信包含收件人和发件人的电话号码,...
如果短信过长,需要分割成多个部分发送。在示例代码中,可以通过设置每条短信不超过70个字来避免这个问题。 6. **监听短信发送状态**: 为了确保短信成功发送,可以创建一个BroadcastReceiver来监听发送状态。在...
3. **分段与重组**:当一条短信超过规定的字符数时,需要将其分割成多个部分(称为短信片段)进行发送,然后在接收端重新组合。这涉及到短信的分段算法和重组策略。 4. **多语言支持**:电子政务系统需要支持多种...
这包括创建能够正确编码和解码PDU的算法,以及处理可能出现的错误,如无效的PDU格式、超长短信的分割与合并等。通过深入学习和理解这个资料,开发者能够更好地理解和操作GSM短信协议,从而构建更高效、更可靠的短信...
2. 分割UCS-2:根据短信的最大长度(通常为160个7位字符或70个16位字符)将UCS-2编码分割成多个部分。 3. 7位编码:将每个UCS-2字符转换为7位的编码,可能需要填充和奇偶校验。 4. 16进制表示:将7位编码的字节序列...
使用`DAdmin_Utils::gbkStrSplit`方法将短信内容分割成多个不超过700字节的片段。如果内容过长,返回的是一个包含截取后内容的数组。在`foreach`循环中,将每个片段与序列号结合,并调用发送短信的函数。 4. **...
- **知识点**:字符串分割、匹配算法、位置查找。 - **应用示例**:统计给定文本中某个单词出现的次数以及第一次出现的位置,不区分大小写。 ##### 第6题:寻宝 - **知识点**:文本分析、模式匹配。 - **应用示例**...
十进制转R进制 - **知识点**: - 数制转换 - 运算操作 - 数组或字符串用于存储结果 - **技术要点**: - 使用除基取余的方法实现转换 - 根据不同的R值使用不同的字符集表示(0-9, A-F) - 反向拼接结果以得到...
2. **短信分割与重组**:长短信在GSM网络中需要被分割成多个短消息进行传输,而CDMA网络可能允许发送更大的数据块。系统必须能够智能地处理这种差异,确保短信在接收端能正确重组。 3. **网络接口**:系统需要有...
1. **数据预处理**:通信数据通常包含大量非结构化和半结构化信息,如通话记录、短信日志、用户位置等。预处理步骤包括数据清洗、转换和归一化,以便于后续的分析和查询。 2. **数据建模**:将通信数据转化为适合...
通过精确提取重叠笔画的特征,并利用支持向量机或人工神经网络进行模式分类,准确地分割笔画,确保识别的准确性。 移动平台的计算资源限制也是一个不可忽视的问题。为了使手写识别算法能够更高效地在移动平台上运行...
10.3.5 转到某天、某周、某月及某年的实现 243 10.3.6 节日管理 245 10.3.7 提醒管理 249 第11章 文件批量处理器 11.1 概述 256 11.2 关键技术 256 11.2.1 文件流技术 256 ...
2. **基本操作**:短信4算法的核心包括字节替换(S盒)、行位移(ShiftRows)、列混淆(MixColumns)以及密钥扩展。这些操作都是为了增加密码的复杂性和安全性。 **二、C语言实现** 1. **字节替换(S盒)**:S盒是...
在模型训练过程中,数据集会被分割成训练集和验证集。训练集用于教模型学习识别特征,而验证集则用来在训练过程中评估模型的性能,防止过拟合。在五类分类问题中,准确率、召回率、F1分数等指标将被用来衡量模型的...
- **短链接**:经过特定算法处理后的、较短形式的网络资源地址,通常用于替代长链接进行分享。 - **API**:应用程序编程接口(Application Programming Interface),一组定义软件组件如何交互的规则和协议。 #####...
1. **数据分割**:如果原始数据长度超过一个短信所能携带的最大长度,需要将其拆分成多个PDU。 2. **地址编码**:编码发送方和接收方的电话号码,通常是国际格式,转换成相应的二进制表示。 3. **数据编码**:将文本...
3. 决策树是一种直观易懂的分类模型,通过一系列规则(节点和分支)对数据进行分割,最终形成决策路径。随机森林则是决策树的集成方法,通过构建多个决策树并取多数投票来提高预测准确性。 4. 随机森林是在决策树...
使用VHDL可以实现对FPGA逻辑的精确控制,设计者可以将复杂的信号处理算法用VHDL语言描述出来,并在FPGA上进行实现。 文档中强调了模块化设计方法的重要性。模块化设计是指将系统分割为多个功能独立的模块,通过接口...