2015-03-31 2 views
0

В основном я хочу преобразовать строковое слово в int как из xml, а теперь из необработанного файла. я могу сделать это с XML:Как преобразовать строку в int/Integer, если строка содержит слово?

final int[] colorArray = getResources().getIntArray(R.array.colors_int); 

И у меня есть это в файле XML:

<integer-array name="colors_int"> 
      <item>@color/red</item> 
      <item>@color/yellow</item> 
      <item>@color/blue</item> 
    </integer-array> 

К этому я могу легко настроить цвета на моих объектах:

view.setBackgroundColor(colorArray[i]); 

НО теперь у меня есть необработанный файл, который содержит имя цвета, разделяющее их пробелами: «синий красный желтый»

Как я могу прочитать их в массиве int array/Integer, чтобы я мог легко покрасить объекты? Я попытался это:

input_file_int.add(Integer.parseInt(line)); 

но не работал, потому что строки Isnt в междунар.

java.lang.NumberFormatException: Invalid int: "blue" 

С строковым массивом, он отлично работает, но я не могу использовать строки для цветных объектов.

Как я могу это сделать?

EDIT:

У меня есть этот пример необработанный файл:

black 
gray 
silver 
maroon 
red 
olive 

Мой colors.xml:

<?xml version="1.0" encoding="utf-8"?> 
    <resources xmlns:android="http://schemas.android.com/apk/res/android"> 
     <!--16 basic color --> 
     <color name="black">#000000</color> 
     <color name="gray">#808080</color> 
     <color name="silver">#C0C0C0</color> 
     <color name="white">#FFFFFF</color> 
     <color name="maroon">#800000</color> 
    </resources> 

И вот как я инициализирован Integer ArrayList:

ArrayList<Integer> input_file_int= new ArrayList<Integer>(); 
+0

String.valueOf (integer)? – Jake

+0

@Jake 'String.valueOf (int)' * преобразует int в строку *, если вы хотите преобразовать String в int, используйте 'Integer.parseInt (string)' – Apurva

ответ

0

Вы можете создать Map из цветов:

Map<String, Integer> colors = new HashMap<String, Integer>(); 
colors.put("blue", 0xff00ff00); 

input_file_int.add(colors.get("blue")); 

EDIT: Если вы пытаетесь сделать поиск из цветов, перечисленных в вашем XML, вы можете сделать это следующим образом:

Resources resources = getResources(); 
int colorId = resources.getIdentifier(line, "color", "com.mypackage.myapplication"); 
int color = resources.getColor(colorId); 
input_file_int.add(color); 
+0

У меня есть собственный color.xml, и я должен заполнить int -array/Integer ArrayList из необработанного файла, о котором я упоминал в вопросе, это ограничения. – Nepo

+0

Ваш оригинальный вопрос заставил вас походить на то, что вы просто пытались сделать картографирование. – tachyonflux

+0

Да, возможно, я забыл упомянуть, что у меня уже есть пользовательский xml цветов. – Nepo

0
// Your arraylist 
ArrayList<Integer> input_file_int = new ArrayList<Integer>(); 

// Read raw file 
Scanner scanner = new Scanner(getResources().openRawResource(
     R.raw.colors)); 
try { 
    while (scanner.hasNext()) { 
     switch (scanner.next()) { 
     // include case of your all 16 (or any number of) colors of your 
     // colors.xml file 
     case "black": 
      input_file_int.add(Integer.parseInt(getResources() 
        .getString(R.color.black).substring(3), 16)); 
      break; 
     case "gray": 
      input_file_int.add(Integer.parseInt(getResources() 
        .getString(R.color.gray).substring(3), 16)); 
      break; 
     case "silver": 
      input_file_int.add(Integer.parseInt(getResources() 
        .getString(R.color.silver).substring(3), 16)); 
      break; 
     // and keep going on 
     default: 
      break; 
     } 
    } 
} catch (Exception e) { 
    Log.e(getTitle().toString(), e.getMessage()); 
} finally { 
    scanner.close(); 
} 
// Now, Arraylist contains true Integer value of colors 
// Be aware you can't directly use it. 
// Use it like this... 

view.setBackgroundColor(0xff000000 + input_file_int.get(2)); 
// Silver in this case 
+0

Я использую пользовательский цвет.xml. – Nepo

+0

См. Мой отредактированный ответ, и вы можете показать нам свой собственный сырой файл 'colors.xml' и как вы инициализировали переменную' input_file_int', чтобы мы могли рассказать вам, как вы можете получить ** Integer Arraylist **. Спасибо –

+0

Да, я редактирую свой ответ с этой информацией. – Nepo

Смежные вопросы