在Android中将ArrayList转换为String数组

37

我有一个ArrayList,其中包含形式为[ann,john]的值。我想将此ArrayList转换为形式为{"ann","john"}的String数组。

我应该如何做?

我的Android代码:

     final Button markabsent = (Button) findViewById(R.id.Button02);
      markabsent.setOnClickListener(new View.OnClickListener() {
          public void onClick(View v) {

            // Perform action on click
             Toast.makeText(display.this,"You have marked the students absent",Toast.LENGTH_SHORT).show();

             SparseBooleanArray checkedabsent = lView.getCheckedItemPositions();



            for (int i = 0; i < arr2.length; i++) 
            {
                if (checkedabsent.get(i)) 
                {
                    items2.add(arr2[i]);
                    System.out.println(items2);

                }
            }

            Log.d("", "items:");
            for (String string : items2)
            {
                Log.d("string is", string);


            }  
          }
      });  

我的 Logcat:

     11-10 21:44:00.414: INFO/System.out(2316): [ann, john, ann]
     11-10 21:44:00.414: DEBUG/(2316): items:
     11-10 21:44:00.414: DEBUG/string is(2316): ann
     11-10 21:44:00.414: DEBUG/string is(2316): john
我尝试了答案中提到的所有方法,但我的 Logcat 似乎没有改善。
以下是一个抛出异常的示例:
          11-10 22:14:20.855: INFO/System.out(3322): [Ljava.lang.String;@44eb6ff0
          11-10 22:16:38.186: ERROR/AndroidRuntime(3411): FATAL EXCEPTION: main
          11-10 22:16:38.186: ERROR/AndroidRuntime(3411): java.lang.ClassCastException: [Ljava.lang.Object;
          11-10 22:16:38.186: ERROR/AndroidRuntime(3411):     at com.example.display$2.onClick(display.java:124)
          11-10 22:16:38.186: ERROR/AndroidRuntime(3411):     at android.view.View.performClick(View.java:2408)
          11-10 22:16:38.186: ERROR/AndroidRuntime(3411):     at android.view.View$PerformClick.run(View.java:8816)
          11-10 22:16:38.186: ERROR/AndroidRuntime(3411):     at android.os.Handler.handleCallback(Handler.java:587)

这里还有一个例子:

          11-10 22:14:20.875: DEBUG/string is(3322): ann
          11-10 22:14:20.875: INFO/System.out(3322): [Ljava.lang.String;@44eb7720
          11-10 22:14:20.875: INFO/System.out(3322): [Ljava.lang.String;@44eb7720
          11-10 22:14:20.885: INFO/System.out(3322): [Ljava.lang.String;@44eb7720
          11-10 22:14:20.895: DEBUG/string is(3322): john
          11-10 22:14:20.895: INFO/System.out(3322): [Ljava.lang.String;@44eb7de8
          11-10 22:16:38.186: ERROR/AndroidRuntime(3411):     at com.example.display$2.onClick(display.java:124)

7个回答

111
使用方法 "toArray()"
ArrayList<String>  mStringList= new ArrayList<String>();
mStringList.add("ann");
mStringList.add("john");
Object[] mStringArray = mStringList.toArray();

for(int i = 0; i < mStringArray.length ; i++){
    Log.d("string is",(String)mStringArray[i]);
}

或者你可以像其他答案中提到的那样这样做:

ArrayList<String>  mStringList= new ArrayList<String>();
mStringList.add("ann");
mStringList.add("john");
String[] mStringArray = new String[mStringList.size()];
mStringArray = mStringList.toArray(mStringArray);

for(int i = 0; i < mStringArray.length ; i++){
    Log.d("string is",(String)mStringArray[i]);
}

http://developer.android.com/reference/java/util/ArrayList.html#toArray()


1
和Casey原帖中一样,我也遇到了同样的问题:*toArray()返回一个无法转换为String[]Object[]*。请注意编辑您的答案。 - JimmyB
当然,我刚刚解决了这个问题,并添加了第二种选择。首先创建数组,然后将其作为参数传递给toArray()方法。 - DallaRosa
1
请在Log.d("string is",(mStringArray[i]);中添加一个闭合的)。 - Moxet Khan

35

总的来说:

List<String> names = new ArrayList<String>();
names.add("john");
names.add("ann");

String[] namesArr = new String[names.size()];
for (int i = 0; i < names.size(); i++) {
    namesArr[i] = names.get(i);  
}

或者更好的方式是使用内置的方法:

List<String> names = new ArrayList<String>();
String[] namesArr = names.toArray(new String[names.size()]);

在你的第一种方式中,如果我打印SOPln(namesArr)..我会得到这个:http://pastie.org/2842530。 - Parth Doshi
对于第二个问题,您需要循环遍历数组以打印值。 - Casey
3
不需要使用 new String[names.size()]new String[0] 也可以。 - Denys Kniazhev-Support Ukraine

10
String[] array = new String[items2.size()];
items2.toArray(array);

如果我使用这个,我在SOP数组的Logcat中会得到类似这样的东西:http://pastie.org/2842530。为什么我在“array”中没有得到“john”、“ann”? - Parth Doshi
1
这是因为将一个数组转换为字符串后,它看起来就像那样。如果你想要System.out.println()数组的元素,你必须自己实现 - 不像ArrayList已经有了自己的*toString()*实现。 - JimmyB
那么我该如何实现呢?我怎样才能知道字符串“array”的内容呢?还有其他方法吗? - Parth Doshi

6

我知道回答晚了很久,但会对其他人有所帮助,我也曾遇到这个问题。

以下是我解决此问题的方法:

String[] namesArr = (String[]) names.toArray(new String[names.size()]);

2
try this

List<String> list = new ArrayList<String>();
list.add("List1");
list.add("List2");

String[] listArr = new String[list.size()];
listArr = list.toArray(listArr );

for(String s : listArr )
    System.out.println(s);

2
你可以尝试这段代码。
String[] stringA = new String[stringArrayList.size()];
stringArrayList.toArray(stringA)
System.out.println(stringA[0]);

1
你可以创建一个与 ArrayList 相同大小的数组,然后使用迭代的 for 循环来索引项目并将它们插入到数组中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接