我需要做一个短信内容的切割存储的小程序,比如一条短信的字数上限为70个字,我有100个字的短信就分为两条存储,150条就分3条存储,像这样的字符串切割JDK有什么自带的方法没。另外int类型的变量做除法取整的问题,比如13/3我希望的结果是5,也就是说向上取整,Math.ceil()好像只能是double类型,请各位指教下

解决方案 »

  1.   

    自带没什么好方法,就是 substring(),自己计算好字符位置。不过,有个小问题我不太记得了,就是你说的70,是“字”还是“字节”;这两者需要注意下。切割方式可以循环切割了,类似:
    while (str.length() > 70) {
      String part = str.substring(0, 70);
      SEND(part);
    }
    SEND(str);
    整型除法,可以偷鸡的方式做,比如:
    int num = 13;
    int div = 3;
    int result = (num + div - 1) / div;
      

  2.   

    前面那个问题可以像LS的那样做13/3我希望的结果是5 
    也可以这样:int result = 13%3==0 ? 13/3 : 13/3+1
      

  3.   

    (13+(3-1))/3 = 15
    这个可以完成向上取整,分页技术常用这种算法计算当前页。短信如果采用UCS-2编码的话,一条短信最多70个字符。拆分字符串,我这有个效率较低的方法,楼主可以参考一下。public class ShortMessageUtil { public static String[] split(String message){
    if(message==null)return null;
    if(message.length()<=70)return new String[]{message};
    int size = (message.length()+69)/70;
    String[] group = new String[size];
    StringBuilder buffer = new StringBuilder(message);
    for(int i=0;i<size-1;i++){
    group[i]=buffer.substring(0, 70);
    buffer.delete(0, 70);
    }
    group[size-1]=buffer.toString();
    return group;
    } /**
     * 测试用例
     */
    public static void main(String[] args) {
    StringBuilder msg = new StringBuilder();
    for(int i=0;i<150;i++){
    msg.append(i%10);
    }
    String message = msg.toString();
    String[] group = split(message);
    for(String sub : group){
    System.out.println(sub);
    }
    }}
      

  4.   

    想不明白,怎么发表的内容没了。
    重发一个,如果再没了,就不管了。1. (13+(3-1))/3 = 5
        这个可以实现向上取整,分页技术中经常用到。2. 写了一个效率较低的拆分算法,楼主可以参考。public class ShortMessageUtil { public static String[] split(String message){
    if(message==null)return null;
    if(message.length()<=70)return new String[]{message};
    int size = (message.length()+69)/70;
    String[] group = new String[size];
    StringBuilder buffer = new StringBuilder(message);
    for(int i=0;i<size-1;i++){
    group[i]=buffer.substring(0, 70);
    buffer.delete(0, 70);
    }
    group[size-1]=buffer.toString();
    return group;
    } /**
     * 测试用例
     */
    public static void main(String[] args) {
    StringBuilder msg = new StringBuilder();
    for(int i=0;i<150;i++){
    msg.append(i%10);
    }
    String message = msg.toString();
    String[] group = split(message);
    for(String sub : group){
    System.out.println(sub);
    }
    }}