/**

* 以给定的<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]);

}

短信分割算法(以长度分割)相关推荐

  1. 基于FCN,U-Net的深度学习医学影像分割算法(细胞分割算法)以及传统算法分析

    本博文主要分析了基于传统计算机视觉的细胞分割算法和基于深度学习的细胞分割算法.主要针对医学影像分割算法.包括了FCN全卷积网络的细胞分割效果,U-Net细胞分割效果.查阅了采用深度学习分割医学影像的几 ...

  2. 用手机发短信,一条短信资费为0.1元,但限定一条短信的内容在70个字以内(包括70个字)。如果你一次所发送的短信超过了70个字,则会按照每70个字一条短信的限制把它分割成多条短信发送。假设已经知道你当

    输入 第一行是整数n,表示当月发送短信的总次数,接着n行每行一个整数,表示每次短信的字数. 输出 输出一行,当月短信总资费,单位为元,精确到小数点后1位. 样例输入 Copy 10 39 49 42 ...

  3. 毕业设计 - 题目:垃圾邮件(短信)分类 算法实现 机器学习 深度学习 开题

    文章目录 1 前言 2 垃圾短信/邮件 分类算法 原理 2.1 常用的分类器 - 贝叶斯分类器 3 数据集介绍 4 数据预处理 5 特征提取 6 训练分类器 7 综合测试结果 8 其他模型方法 9 最 ...

  4. 【毕业设计】垃圾邮件(短信)分类算法研究与实现 - 机器学习

    文章目录 1 前言 2 垃圾短信/邮件 分类算法 原理 2.1 常用的分类器 - 贝叶斯分类器 3 数据集介绍 4 数据预处理 5 特征提取 6 训练分类器 7 综合测试结果 8 其他模型方法 9 最 ...

  5. 【点云处理技术之PCL】点云分割算法1——平面模型分割、圆柱模型分割和欧式聚类提取(含欧式聚类原理)

    文章目录 1. 平面分割 2. 圆柱分割 3. 欧式聚类分割 1. 平面分割 下列中,先随机创建了z=1.0的随机点,然后改变其中3个点的z值.最后,使用SACMODEL_PLANE平面模型对它进行拟 ...

  6. 基于深度学习的场景分割算法研究综述

    基于深度学习的场景分割算法研究综述 人工智能技术与咨询 来自<计算机研究与发展> ,作者张 蕊等 摘 要 场景分割的目标是判断场景图像中每个像素的类别.场景分割是计算机视觉领域重要的基本问 ...

  7. 深度学习应用篇-计算机视觉-语义分割综述[5]:FCN、SegNet、Deeplab等分割算法、常用二维三维半立体数据集汇总、前景展望等

    [深度学习入门到进阶]必看系列,含激活函数.优化策略.损失函数.模型调优.归一化算法.卷积模型.序列模型.预训练模型.对抗神经网络等 专栏详细介绍:[深度学习入门到进阶]必看系列,含激活函数.优化策略 ...

  8. 翻译英文文献----利用MAP-MRF模型改进三维网格分割算法

    利用MAP-MRF模型改进三维网格分割算法 摘要:本文提出了一种改进三维网格分割算法性能的新方法.我们的方法以一个三维网格对象和一个分割算法作为输入.我们的方法使用马尔可夫随机场(MRF)估计,对于每 ...

  9. FCN与U-Net语义分割算法

    FCN与U-Net语义分割算法 图像语义分割(Semantic Segmentation)是图像处理和是机器视觉技术中关于图像理解的重要一环,也是 AI 领域中一个重要的分支.语义分割即是对图像中每一 ...

  10. Patchwork++论文阅读——基于3D点云的快速鲁棒地面分割算法

    文章目录 摘要 1. 介绍 2. 相关工作 A. 基于学习的地面分割方法 B. 传统的地面分割方法 C. 地面分割的应用 3. PATCHWORK++:快速.稳健.自适应的地面分割 A. 问题定义 B ...

最新文章

  1. PyTorch 进行 Neural-Transfer
  2. 数字化如何影响药物开发
  3. .net面试问题汇总(转)
  4. APK加壳【1】初步方案实现详解
  5. .NET中使用Redis总结 —— 1.Redis搭建
  6. RDLC系列之五 初试XAML
  7. UIBarbuttonItem
  8. jQuery Ajax 方法调用 Asp.Net WebService 的详细例子
  9. 最大化最小值 | | 最小化最大值
  10. 动态规划之图像压缩问题
  11. Qt实践录:常见控件操作示例2
  12. 网络加速 java_快速入门之:使用 dragonite forwarder 加速 Shadowsocks 连接
  13. Linux设备驱动01:Linux设备驱动概述
  14. 在python语言中定义私有成员变量的方法是_Python在类中有“私有”变量吗?
  15. cipher命令(转)
  16. 骑士php授权,骑士人才系统伪静态设置教程
  17. 2017年经典hadoop体系课程-徐培成-专题视频课程
  18. 小说app源码,uni-app跨平台框架开发,一套代码双端运行,无差别
  19. halcon代码LAWS纹理滤波
  20. C语言程序设计教程 北京邮电,C语言程序设计教程第3章_北京邮电大学出版社.ppt...

热门文章

  1. 2021年茶艺师(中级)免费试题及茶艺师(中级)模拟考试
  2. 前端晋升ppt_web前端幻灯片.ppt
  3. 公司运营中更注重转化的出价策略,如何实现? —Google sem
  4. 你不知道的CSS霓虹灯文字总结
  5. 京东代挂搭建+xdd-plus机器人配置
  6. mysql ddl ddm_数据库ddl ddm语句
  7. 耳机插入笔记本偶尔有“咚咚”声音
  8. 百度地图全景——百度经纬度显示全景
  9. orbslam2学习记录
  10. 如何最大限度地提高您的记忆力