java - java中如何将String数组改为ArrayList

标签 java arrays string 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 block 来关闭您的外部资源,您的代码是一个巨大的内存泄漏。

关于java - java中如何将String数组改为ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24301857/

相关文章:

java - eclipse 。保存工作区需要永远

java - 如何使用 flatpack 解析大文件

java - 如何使用 Jersey 将嵌套列表编码为 JSON?我得到一个空值数组或一个包含数组的单元素字典数组

python - 在Python中返回整个字符串;删除 无

python - 如何测试字符串的一部分是否等于python列表中的项目?

java - 抽象数据类型和 Json 映射

java - 翻转和旋转图像。仿射变换在 java 中无法正常工作

c - 为什么未排序的数组在我的代码运行时发生变化?

python - 通过两个不同长度的数组和索引操作运行 for 循环

C 程序 - 在每个其他字符之间放置一个星号而不替换字符串中的那些字符