SMS消息限制为160个字符

时间:2013-04-29 14:49:43

标签: java

我有一个字段,可以包含1到无限数量的字符。我想限制发送最多3条消息(所以最小1条最多3条消息)。所以最多480个字符。我想分别列出(写入输出)每条消息(从0到160; 160-320; 320-480)。480以上的所有信息都不是我的关注。

我的班级在例如500个字符的情况下工作,但对于少量字符,例如它不会工作。

 String message="message to sent";
 int m=message.length();


b=160;
int c=m/b;


int bi=0;
int ei=160;



for (int i = 0; i < c; i++) {
    while (ei<=480)
    {
    System.out.println("\n"+message.substring(bi, ei));
    bi=bi+160;
    ei=ei+160;
    }
}

我需要纠正什么才能完全解决这个问题以及消息和大消息中的少量字符?     谢谢

3 个答案:

答案 0 :(得分:3)

int c=m/b;

c会在投放到int时向下舍入,所以number of sms - 1如果m < b,您应该写:

int c = (int) Math.ceil((double) m/b);

或者,因为mb是肯定的:

int c = (m+b-1)/b;

此外,我不明白你的双循环的目的,如果你想显示每个消息块,你可以循环c

for(int i = 0; i < c && i < 3; i++) {
    int start = i*b;
    int end = Math.min( (i+1)*b, m);
    System.out.println( message.substring(start, end) );
}

或者你可以循环offset

for(int offset = 0; offset<b*c && offset<b*3; offset+=b) {
    System.out.println( message.substring(offset , Math.min(m, offset+b) ) );
}

但你不能两者兼顾。

答案 1 :(得分:0)

message.substring(bi, ei < m ? ie : m));不是160的倍数时,您需要m

此外,当您到达邮件末尾时退出for循环

答案 2 :(得分:0)

此代码存在很多错误。

  1. 正如zakinster已经回答:m/b如果0向下舍入到m < b,那么你的for循环永远不会被执行
  2. 您的双循环是不必要的,一旦解决问题1就会导致麻烦。
  3. 您不测试消息的结尾
  4. 你最好用以下方法替换最后一个双循环:

    int offset = 0;
    int length;
    
    while (offset < 480 && offset < m) {
        length = Math.min(160, m - offset);
        System.out.println("\n"+message.substring(offset, offset+length));
        offset += 160;
    }