0

我有一个字段可以包含从 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;
    }
}

对于消息中的少量字符和大消息,我必须纠正什么才能完全工作?谢谢你

4

3 回答 3

3
int c=m/b;

c将在转换为时四舍五入,int所以它是number of sms - 1if 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) ) );
}

但你不能两者都做。

于 2013-04-29T14:51:53.993 回答
0

这段代码有很多错误。

  1. 正如 zakinster 已经回答的那样:m/b四舍五入到0if m < b,所以你的 for 循环永远不会执行
  2. 你的双循环是不必要的,一旦你解决了问题 1,就会导致麻烦。
  3. 您不测试消息的结尾

您最好通过以下方式替换最后一个双循环:

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;
}
于 2013-04-29T15:01:14.080 回答
0

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

for另外,当您到达消息末尾时退出循环

于 2013-04-29T14:52:14.813 回答