【问题标题】:How to change String Array to ArrayList in java如何在java中将字符串数组更改为ArrayList
【发布时间】:2014-06-19 08:19:15
【问题描述】:

这是定义 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"));

请帮忙!

【问题讨论】:

    标签: java arrays string arraylist


    【解决方案1】:

    这不是您使用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 块来关闭你的外部资源,你的代码是一个巨大的内存泄漏。

    【讨论】:

    • i 值是迭代结果集以从数据库中获取电子邮件地址。我怎样才能删除它?你能把它作为完整的代码回答吗
    • @user3152748 你错了。您的i 值仅用于索引到您现在已删除 的数组。列表没有必要。此答案中已为您提供了足够的信息来解决问题 - 只需运用一点脑力即可。
    • 代码按预期工作。但是得到 java.lang.ArrayIndexOutOfBoundsException: 2 和 java.lang.NullPointerException 错误..
    • 哪里?您可以更新您的问题或使用堆栈跟踪发布新问题。
    • 你的和 Subhrajyoti Majumder 代码运行良好..但出现错误:(
    【解决方案2】:

    如果你有一个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
    

    ArrayList#toArrayList 转换为Array,这在代码中终于完成了。

    【讨论】:

    • 获取 java.lang.ArrayIndexOutOfBoundsException: 2 错误。 :(
    • 当它返回时,我需要将值作为数组字符串。请考虑!
    • 是的,这就是为什么 emailAddress.toArray(new String[emailAddress.size()]),它将您的 ArrayList 转换为 Array 并且记住不需要数组到方法中。
    • 代码按预期工作。但是得到 java.lang.ArrayIndexOutOfBoundsException: 2 和 java.lang.NullPointerException 错误..
    • 它必须在其他地方,如果它是那么发布一个新的问题,详细的花花公子
    【解决方案3】:

    声明为

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

    将其转换为字符串[]:

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

    【讨论】:

    • 最后我需要将它转换为字符串数组..我不需要返回值在 ArrayList 中
    • 你知道大小,使用它。调用new String[0]{} 会导致创建两个数组 - 您传入的空数组和正确大小的数组。这有点浪费。
    • 这是一个可以忽略的微不足道的消费。
    【解决方案4】:

    您在代码中错误地使用了 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()]);
    

    【讨论】:

      【解决方案5】:
      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"));
      }
      

      【讨论】:

      • Arrays.asList 大小固定。除了访问语义之外,这不会改变任何东西。
      • @BoristheSpider:同意..OP 已询问如何转换,因此给出了 asList 的选项...在第二段中给出了解决方案...。
      • 你的意思是我应该指出:new ArrayList(Arrays.asList(myArray)) 这是你的意思?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-16
      • 2021-10-20
      • 2012-02-14
      • 2017-10-24
      • 2016-01-01
      • 2018-02-12
      相关资源
      最近更新 更多