我有这段代码
String str1 = (String) optionlist1.get(i);//str1=apple
String str2 = (String) optionlist2.get(i);//str2=mango
String str3 = (String) optionlist3.get(i);//str3=water
for(int k=1;k<4;k++){
String str="str"+k;
sb.append("<p>"+k+")"+str+"</p>");
}
当我打印出来时,我只获得str1,str2,str3
而不是实际数据,apple,mango,water
。
有办法做到这一点吗?如果需要更多信息,请与我们联系。
答案 0 :(得分:2)
由于您声明str = "str" + k
,这意味着str
的值为str1
,str2
等,因此无效。这些值代表字符串文字,而不是变量名。要解决您的问题,您可以这样做:
List<String> fruit = new ArrayList<String>();
fruit.add((String) optionlist1.get(i));
fruit.add((String) optionlist2.get(i));
fruit.add((String) optionlist3.get(i));
for(String str : fruit)
{
System.out.println(str);
}
您要通过Reflection API
(here上的更多内容来实现 ,但我认为对于您的特定问题,使用反射可能是有点矫枉过正,所以坚持使用更简单的解决方案可能会更好。
编辑:此代码应该通过使用反射来完成您的工作:
public static List<String> lst0 = new ArrayList<String>();
public static List<String> lst1 = new ArrayList<String>();
public static void main(String[] args) throws NoSuchElementException, NoSuchFieldException, IllegalAccessException
{
lst0.add("abc");
lst1.add("def");
Class thisClass = SOTest.class;
for(int i = 0; i < 2; i++)
{
Field field = thisClass.getField("lst" + i);
List<String> lst = (List<String>) field.get(new ArrayList<String>());
System.out.println(lst.get(0));
}
}
答案 1 :(得分:1)
您无法使用字符串文字引用变量,因为字符串“str1”不等于引用变量str1
。一种替代方法可以是使用这里提到的数组:
String strArrr[] = new String[3];
String strArrr[0] = (String) optionlist1.get(i);//str1=apple
String strArrr[1] = (String) optionlist2.get(i);//str2=mango
String strArrr[2] = (String) optionlist3.get(i);//str3=water
for(int k=1;k<4;k++){
String str=strArr[k-1];
sb.append("<p>"+k+")"+str+"</p>");
}
答案 2 :(得分:1)
名称为str1
的字符串与值为str1
e.g。
String str1 = "Apple";
str1.equals ("str1") == false;
尝试使用数组
String str[] = new String [3];
str[0] = (String) optionlist1.get(i);//str1=apple
str[1] = (String) optionlist2.get(i);//str2=mango
str[2] = (String) optionlist3.get(i);//str3=water
然后
for(int k=1;k<4;k++){
String s=str[k-1];
sb.append("<p>"+k+")"+s+"</p>");
}
答案 3 :(得分:1)
变量名称无法动态生成。
你可以试试,
List<String> list = new ArrayList<String>();
list.add((String) optionlist1.get(i));//str1=apple
list.add((String) optionlist2.get(i));//str2=mango
list.add((String) optionlist3.get(i));//str3=water
int counter=1;
for(String str : list){
sb.append("<p>"+counter+")"+str+"</p>");
counter++;
}
答案 4 :(得分:1)
str1,str2和str3是变量名。您正在创建变量名称作为String str =“str”+ k,它最终是一个值而不是变量名。
您需要创建一个String数组来存储您的选项。
String[] strs = new String[];
您可以将str1,str2 ..添加到此数组中。
strs[0] = str1;
strs[1] = str2;
strs[2] = str3;
并在for循环中访问此数组。
for(int k=0; k < 3; k++) {
String str="str"+k;
sb.append("<p>"+ strs[k] + "</p>");
}
这会奏效。 :)