在地址数组中循环?

时间:2014-05-27 13:36:55

标签: java error-handling imap

我是java的初学者,我正在尝试循环地址数组(address []),但我不知道数组的大小,也无法检查数组的终点。 这是我的代码:

int j=0;
              System.out.println(j);
              while(msg.getRecipients(Message.RecipientType.CC)[j]!=null)
             {cc =cc.concat(msg.getRecipients(Message.RecipientType.CC)[j].toString());
             cc =cc.concat(",");
             j++;
             System.out.println(j);}  

          }

基本上msg.getRecipients(Message.RecipientType.CC)是类型地址的数组,当irun时我得到错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2
at test2.main(test2.java:135)

5 个答案:

答案 0 :(得分:0)

如果您查看此tutorial,您会看到有一个名为length的变量,它包含数组的大小。并且for循环更适合您想要实现的目标

for(int i = 0; i < array.length; i++) {
    //do stuff with array[i]
}

答案 1 :(得分:0)

您是否尝试过使用msg.getRecipients(Message.RecipientType.CC).length,它给出了数组的长度

答案 2 :(得分:0)

来自JLS,有

  

public final字段length -

所以,这应该是 -

int j=0;
while(j < msg.getRecipients(Message.RecipientType.CC).length)
{
  System.out.println(j);
  cc = cc.concat(msg.getRecipients(Message.RecipientType.CC)[j].toString());
  cc = cc.concat(",");
  j++;
}

答案 3 :(得分:0)

试试这个:

int j=0;
System.out.println(j);
while(j < msg.getRecipients(Message.RecipientType.CC).length){
      cc =cc.concat(msg.getRecipients(Message.RecipientType.CC)[j].toString());
      cc =cc.concat(",");
      j++;
      System.out.println(j);  
}

答案 4 :(得分:0)

这里要了解的最重要的事情是你总是知道Java中数组的大小,你可以使用数组的 length 属性来访问它,例如: myArray.length。除此之外,还有一些方面可以改进您的方法:

  • 每次围绕while循环获取数组时,这可能会正常工作,但这是不必要的工作。只需抓取一次数组,然后遍历其内容。
  • 如果您的cc变量是String,那么请注意字符串是不可变的,这意味着每次您在其上调用concat时,您都会创建一个新的String宾语。这不是使用循环动态构建String的非常有效的方法。好的做法是使用StringBuilder(这是可变的)来构建最终文本,然后在完成后将其转换为String

您的代码可能如下所示:

StringBuilder recipients = new StringBuilder();
Address[] ccs = msg.getRecipients(Message.RecipientType.CC);
for (int i = 0; i < ccs.length; i++)
{
  if (i > 0) recipients.append(",");
  recipients.append(ccs[i]);
}

String result = recipients.toString();