假设我有很多字符串变量(例如100):
String str1 = "abc";
String str2 = "123";
String str3 = "aaa";
....
String str100 = "zzz";
我想将这些String变量添加到ArrayList,我现在正在做的是
ArrayList<String> list = new ArrayList<String>();
list.add(str1);
list.add(str2);
list.add(str3);
...
list.add(str100);
我很好奇,有没有办法使用循环?例如。
for(int i = 1; i <= 100; i++){
list.add(str+i)//something like this?
}
答案 0 :(得分:12)
使用数组:
String[] strs = { "abc","123","zzz" };
for(int i = 0; i < strs.length; i++){
list.add(strs[i]); //something like this?
}
这个想法非常受欢迎,以至于有这样的内置方法可以做到这一点。例如:
list.addAll( Arrays.asList(strs) );
会将您的数组元素添加到现有列表中。如果您只想要一个只包含数组元素的列表,可以在一行中完成:
List<String> list = Arrays.asList( strs );
答案 1 :(得分:1)
如果strX
是类字段,那么您可以尝试使用反射 - link来访问字段和方法。
如果它是局部变量,那么您无法访问其名称,因此您将无法访问它(除非str
为数组,因此您可以通过{{1}访问其值但是你可能不需要str[i]
)。
<强>更新强>
更新问题并显示您有100个变量后
ArrayList
我必须说你需要数组。数组软件正好引入编程语言 ,以避免您现在处于 状态。因此,您应该使用
而不是声明100个单独的变量String str1 = "abc";
String str2 = "123";
String str3 = "aaa";
//...
String str100 = "zzz";
然后通过String[] str = {"abc", "123", "aaa", ... , "zzz"};
访问值,其中index的值介于str[index]
和数组-1的大小之间,在这种情况下,其范围为0
- 0
。
如果你仍然需要将所有数组元素放到列表中,你可以使用
99
首先
List<String> elements = new ArrayList<>(Arrays.asList(str));
创建由Arrays.asList(str)
数组备份的列表(这意味着如果对数组进行任何更改,它将反映在列表中,反之亦然,从此方法对列表所做的更改将影响{{1} } array)。
为了避免使列表依赖于数组的状态,我们可以创建单独的列表,将先前列表中的元素复制到自己的数组中。我们可以通过使用构造函数
来完成它str
或者我们可以使用
更多地分离这些步骤str
答案 2 :(得分:1)
如果您想坚持良好做法,请在数组中声明String
:
String[] strs = new String[]{ "abc", "123", "aaa", ... };
for (String s : strs) // Goes through all entries of strs in ascending index order (foreach over array)
list.add(s);
答案 3 :(得分:0)
是。使用循环的方法不是声明100个字符串变量。改为使用一个数组。
String[] str = new String[101];
str[1] = "abc";
str[2] = "123";
str[3] = "aaa";
....
str[100] = "zzz";
(我使索引从1到100显示它与原始代码的对应关系,但从0到99更为正常,并使用@中的数组初始化程序初始化它标记空间的答案。)
答案 4 :(得分:0)
如果您正在使用Java 9,那么您可以轻松地将多个字符串对象添加到数组列表中
del/1
答案 5 :(得分:0)
以下内容根据您拥有的特定ArrayList
值创建String
:
ArrayList<String> list1 = new ArrayList<String>() {{addAll(Arrays.asList(new String[]{"99", "bb", "zz"}));}};
或者,如果只是您想要的一些不同的值,可以使用它来表示-其中10个:
ArrayList<String> list2 = new ArrayList<String>() {{for (int i=0; i<10; i++) add(""+System.currentTimeMillis());}};