我有一个字段,可以包含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;
}
}
我需要纠正什么才能完全解决这个问题以及消息和大消息中的少量字符? 谢谢
答案 0 :(得分:3)
int c=m/b;
c
会在投放到int
时向下舍入,所以number of sms - 1
如果m < b
,您应该写:
int c = (int) Math.ceil((double) m/b);
或者,因为m
和b
是肯定的:
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)
此代码存在很多错误。
m/b
如果0
向下舍入到m < b
,那么你的for循环永远不会被执行你最好用以下方法替换最后一个双循环:
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;
}