2013-12-22 3 views
-1

Скажите, если бы у меня была серия целых чисел String с именем, i: i1, i2, i3 и т. Д., Но хотелось бы составить каждое имя с комбинацией String и Integer, например:Получить значение String Integer из созданной строки

String i1 = "abc"; 
String i2 = "bca"; 
String i3 = "cba"; 

for (int i = 1; i <= 3; i++) { 
    String a = "i" + i; 
    int aa = Integer.parseInt(a); 
    ArrayList<String>.add(aa); 
} 

Как я мог это достичь? Это для цикла просто добавляет «i1», «i2» и «i3» в список вместо «abc», «bca» и «cba».

+3

Java нет (и не может) оценить имена переменных динамически. Используйте массив, карту или список. –

+0

Я думал, используя parseInt («i1»), он сделает одно и то же значение i1 и, следовательно, вернется к его значению «abc» и т. Д. Я предполагаю, что он просто создает новый Integer? – Ollygrov

+1

Вы всегда должны попробовать запустить код, прежде чем задавать вопрос. И прочитайте javadoc для 'Integer.parseInt()'. –

ответ

0

Используйте Integer.toString(), один из вариантов может использовать буквенные символы, а также числовые, чтобы представить String.

Вам необходимо будет создать List, чтобы добавить String с.

List<String> list = new ArrayList<>(); 

for (int i = 1; i <= 3; i++) { 
    list.add(whatever); 
} 

Или, если вы пытаетесь сохранить отображение строки в целое, то вы должны смотреть на Map, вероятно, HashMap.

3

Вам необходимо использовать некоторые из реализаций Map.

Например:

String[] words = { "abc", "bca", "cba" }; 
Map<String, String> map = new HashMap<String, String>(); 
for (int i = 1; i <= 3; i++) { 
    String a = "i" + i; 
    map.put(a, words[i - 1]); 
} 

В конце концов, как выглядит карта:

--key-- | --value-- 
------------------- 
    "i1" | "abc" 
    "i2" | "bca" 
    "i3" | "cba" 
4

Ах, я неправильно понял ваш вопрос на первый. Да, вы можете делать то, что хотите сделать через отражение.

public class Main { 
    private String i1 = "abc"; 
    private String i2 = "bca"; 
    private String i3 = "cba"; 

    public static void main(String[] args) { 
     new Main(); 
    } 

    public Main(){ 
     for (int i = 1; i <= 3; i++) { 
      String a = "i" + i; 
      String f = null; 
      try { 
       f = (String) this.getClass().getDeclaredField(a).get(this); 
      } catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      System.out.println(f); 
     } 
    } 
} 

Выходные:

abc 
bca 
cba 

Ключевые точки:

  • getDeclaredField() - возвращает частное поле в данном классе
  • get() - возвращает значение из поля в данном объекте

Следует отметить, что сначала вы должны изучить структуру Map<String, String>. Другие ответы уже дают объяснение этому.

+0

Почему так сложно? –

+0

@kocko: потому что это ответ на вопрос, который он на самом деле задал, в отличие от другого подхода, который вы опубликовали.Мой ответ буквально содержит одну строку кода, которая делает эту вещь, все остальное - это просто блок try-catch или код, используемый для демонстрации концепции. Я бы не назвал это сложным. –

0

Используйте массив строк:

String[] stringArr = new String[3] 
ArrayList<String> list = new ArrayList<String>(); 

stringArr[0] = "abc"; 
stringArr[1] = "bca"; 
stringArr[2] = "cba"; 

for(int i = 0; i<String.length; i++) 
{ 
    list.add(Integer.parseInt(stringArr[i])); 
} 
Смежные вопросы