如何在java中将String Array更改为ArrayList



这是定义String Array(25(的原始代码。它运行得很好。但我不需要把它定义为25。相反,我使用了arraylist。请检查我的代码。

使用数组字符串:

public String[] getemailAddr(String strAccountnbr) throws Exception {

        String strQuery2 = null;
        ResultSet rs = null;
        PreparedStatement ps = null;
        String[] emailAddress = new String[25];
        int i=0;
         strQuery2 =  "SELECT c.EmailAddress AS EmailAddress" +
            " FROM customeremailid c " +
            "WHERE c.AccountNbr = ? " ;
          logMsg("strQuery2: "+strQuery2);
          ps = getDBConn().prepareStatement(strQuery2);
          ps.setString(1, strAccountnbr);        
          rs = ps.executeQuery();
        while(rs.next())
        {
                emailAddress[i]=(rs.getString("EmailAddress")); 
                logMsg("emailAddress[i]"+" "+i+": "+emailAddress[i]);   
                i=i+1;
            }
        return emailAddress;  
        }

在这里,我需要将String Array更改为Arraylist。我试过这样的东西,

public String[] getemailAddr(String strAccountnbr) throws Exception {

        String strQuery2 = null;
        ResultSet rs = null;
        PreparedStatement ps = null;
       //Newly tried // 
        ArrayList<String> strArrEmailIds = new ArrayList<String>();
        String[] emailAddress= new String[strArrEmailIds.size()];
        strArrEmailIds.toArray(emailAddress);
        //Newly tried // 
        int i=0;
         strQuery2 =  "SELECT c.EmailAddress AS EmailAddress" +
            " FROM customeremailid c " +
            "WHERE c.AccountNbr = ? " ;
          logMsg("strQuery2: "+strQuery2);
          ps = getDBConn().prepareStatement(strQuery2);
          ps.setString(1, strAccountnbr);        
          rs = ps.executeQuery();
        while(rs.next())
        {
                emailAddress[i]=(rs.getString("EmailAddress")); 
                logMsg("emailAddress[i]"+" "+i+": "+emailAddress[i]);   
                i=i+1;
            }
        return emailAddress;  
        }

电子邮件ID是从数据库而不是example.com.获取的

但我得到了java.lang.ArrayIndexOutOfBoundsException: 0错误在这一行。emailAddress[i]=(rs.getString("EmailAddress"));

请帮忙!

这不是使用ArrayList的方式。

首先,你需要写:

List<String> strArrEmailIds = new ArrayList<>();

因此,编程到interface并使用Java 7菱形运算符。

接下来,删除索引i。你不需要这个。

最后,只需执行:

emailAddress.add(rs.getString("EmailAddress")); 

要将其转换回String[],您可以执行以下操作:

String[] arr = emailAddress.toArray(new String[emailAddress.size()]);

这是我给你的建议最终代码:

public String[] getemailAddr(String strAccountnbr) throws Exception {
    final List<String> emailAddress = new ArrayList<>();
    final String strQuery2 = "SELECT c.EmailAddress AS EmailAddress"
            + " FROM customeremailid c "
            + "WHERE c.AccountNbr = ? ";
    try (final PreparedStatement ps = getDBConn().prepareStatement(strQuery2)) {
        ps.setString(1, strAccountnbr);
        try (final ResultSet rs = ps.executeQuery()) {
            while (rs.next()) {
                emailAddress.add(rs.getString("EmailAddress"));
            }
        }
    }
    return emailAddress.toArray(new String[emailAddress.size()]);
}

我已经删除了你对null毫无意义的任务。我添加了try-with-resources块来关闭您的外部资源,您的代码是一个巨大的内存泄漏。

如果您有一个ArrayList,那么您就不需要再使用数组了,实际上ArrayList是由Array本身及其动态大小支持的。

List<String> emailAddress= new ArrayList<String>(); // dynamic array
...
while(rs.next()){
    emailAddress.add((rs.getString("EmailAddress"));
    ...
}
return emailAddress.toArray(new String[emailAddress.size()]); // creating array of String type

并且CCD_ 11将CCD_ 12转换为CCD_。

将其声明为

ArrayList<String> emailAddress= new ArrayList<String>();
...
emailAddress.add((rs.getString("EmailAddress")); 

将其转换为String[]:

return emailAddress.toArray(new String[emailAddress.size()]);

您在代码中错误地使用了ArrayList。定义时

ArrayList<String> strArrEmailIds = new ArrayList<String>();
String[] emailAddress= new String[strArrEmailIds.size()];
strArrEmailIds.toArray(emailAddress);

默认情况下,strArrEmailIds的大小为0,因此生成的emailAddress数组的长度也为0。稍后在while循环中,如果您试图将值分配给emailAddress[0],它将抛出ArrayIndexOutOfBoundsException

相反,正确的方法是:

ArrayList<String> strArrEmailIds = new ArrayList<String>();
//....
while(rs.next()){
    //....
    strArrEmailIds.add(rs.getString("EmailAddress"));
}
//....
String[] emailAddress = strArrEmailIds.toArray(new String[strArrEmailIds.size()]);
java.lang.ArrayIndexOutOfBoundsException: 0 if your result set goes beyond 25 itteration.

如何将array转换为ArrayList

Arrays.asList(myArray)

在你的情况下,你可以有一个list,在resulset列表中,你可以像一样将它们添加到列表中

List<String> emails = new ArrayList<String>();
while(...){
emails.add(rs.getString("EmailAddress"));
}

最新更新