如何在java中将字符串数组更改为ArrayList

如何在java中将字符串数组更改为ArrayList,java,arrays,string,arraylist,Java,Arrays,String,Arraylist,下面是定义字符串数组(25)的原始代码。它工作得很好。但我不需要把它定义为25。相反,我使用了arraylist。请检查我的密码 使用数组字符串: public String[] getemailAddr(String strAccountnbr) throws Exception { String strQuery2 = null; ResultSet rs = null; PreparedStatement ps = null;

下面是定义字符串数组(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;  
        }
这里,我需要将字符串数组更改为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;  
        }
public String[]getemailAddr(String strAccountnbr)引发异常{
字符串strQuery2=null;
结果集rs=null;
PreparedStatement ps=null;
//新尝试的//
ArrayList strarremailds=新的ArrayList();
String[]emailAddress=新字符串[strArrEmailIds.size()];
strarremailds.toArray(电子邮件地址);
//新尝试的//
int i=0;
strQuery2=“选择c.EmailAddress作为EmailAddress”+
“来自customeremailid c”+
“其中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;
}
返回电子邮件地址;
}
电子邮件ID是从数据库而不是example.com获取的

但是我越来越
java.lang.ArrayIndexOutOfBoundsException:0
错误 在这一行。
emailAddress[i]=(rs.getString(“emailAddress”)

请帮忙

声明为

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

ArrayList<String> emailAddress= new ArrayList<String>();
...
emailAddress.add((rs.getString("EmailAddress")); 
如何将
数组
转换为
数组列表

Arrays.asList(myArray)
在您的情况下,您可以有一个
列表
,在
结果集
中,您可以将它们添加到列表中,如下所示

List<String> emails = new ArrayList<String>();
while(...){
emails.add(rs.getString("EmailAddress"));
}
List emails=new ArrayList();
而(…){
emails.add(rs.getString(“EmailAddress”);
}
如何将
数组
转换为
数组列表

Arrays.asList(myArray)
在您的情况下,您可以有一个
列表
,在
结果集
中,您可以将它们添加到列表中,如下所示

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

这不是使用
阵列列表的方式

首先,你需要写:

List<String> strArrEmailIds = new ArrayList<>();
要将其转换回
字符串[]
,您可以执行以下操作:

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()]);
}
public String[]getemailAddr(String strAccountnbr)引发异常{
最终列表emailAddress=新的ArrayList();
最终字符串strQuery2=“选择c.EmailAddress作为EmailAddress”
+“来自customeremailid c”
+“其中c.AccountNbr=?”;
try(final PreparedStatement ps=getDBConn().prepareStatement(strQuery2)){
ps.setString(1,strAccountnbr);
try(最终结果集rs=ps.executeQuery()){
while(rs.next()){
emailAddress.add(rs.getString(“emailAddress”);
}
}
}
返回emailAddress.toArray(新字符串[emailAddress.size()]);
}

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

这不是使用
阵列列表的方式

首先,你需要写:

List<String> strArrEmailIds = new ArrayList<>();
要将其转换回
字符串[]
,您可以执行以下操作:

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()]);
}
public String[]getemailAddr(String strAccountnbr)引发异常{
最终列表emailAddress=新的ArrayList();
最终字符串strQuery2=“选择c.EmailAddress作为EmailAddress”
+“来自customeremailid c”
+“其中c.AccountNbr=?”;
try(final PreparedStatement ps=getDBConn().prepareStatement(strQuery2)){
ps.setString(1,strAccountnbr);
try(最终结果集rs=ps.executeQuery()){
while(rs.next()){
emailAddress.add(rs.getString(“emailAddress”);
}
}
}
返回emailAddress.toArray(新字符串[emailAddress.size()]);
}

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

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

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
List emailAddress=new ArrayList();//动态数组
...
while(rs.next()){
emailAddress.add((rs.getString(“emailAddress”));
...
}
返回emailAddress.toArray(新字符串[emailAddress.size()]);//创建字符串类型的数组

ArrayList#toArray
则将
列表
转换为
数组
,该数组最后在代码中完成。

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

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
List emailAddress=new ArrayList();//动态数组
...
while(rs.next()){
emailAddress.add((rs.getString(“emailAddress”));
...
}
返回emailAddress.toArray(新字符串[emailAddress.size()]);//创建字符串类型的数组

ArrayList#toArray
List
转换为
Array
,这在代码中是最后完成的。

您在代码中错误地使用了ArrayList

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

您在代码中错误地使用了ArrayList

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

至少我需要将其转换为字符串数组..我不需要返回值为ArrayListYou知道大小,请使用它。调用
新字符串[0]{}
导致创建两个数组-一个是您传入的空数组,另一个是大小正确的数组。这有点浪费。消耗量太小,可以忽略。至少我需要将其转换为字符串数组..我不知道