将一个int变量附加到StringBuffer

时间:2014-02-04 06:10:29

标签: java string stringbuffer

我有这段代码

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

有办法做到这一点吗?如果需要更多信息,请与我们联系。

5 个答案:

答案 0 :(得分:2)

由于您声明str = "str" + k,这意味着str的值为str1str2等,因此无效。这些值代表字符串文字,而不是变量名。要解决您的问题,您可以这样做:

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 APIhere上的更多内容来实现 ,但我认为对于您的特定问题,使用反射可能是有点矫枉过正,所以坚持使用更简单的解决方案可能会更好。

编辑:此代码应该通过使用反射来完成您的工作:

    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>");
}

这会奏效。 :)