список строк в список двойников Java - PullRequest
1 голос
/ 14 июня 2011

У меня есть файл данных, содержащий комбинацию значений типа double и строк, например:

Rmax=2.3
Rmin=1.0

и т.д..

Я использую split (), чтобы вырезать = так:

while ((strLine = br.readLine()) != null) {
            String phrase = strLine;                
            try {
                //splits to variable name, value
                String[] parsed = phrase.split("[=]");                      
                int parsed[0].toString() = parsed[1];

            } catch (PatternSyntaxException e) {
                System.out.println("Error: " + e.getMessage());
            }
        }

Теперь я пытаюсь инициализировать значения, чтобы parsed [0] стал именем целого числа, а parsed [1] - значением. эквивалент инициализатора int name = значение;

очевидно, линия

int parsed[0].toString() = parsed[1]; 

не работает. как мне это сделать?

Ответы [ 4 ]

3 голосов
/ 14 июня 2011

Как насчет этого

Map<String, Double> map = new HashMap<String,Double>()
while ((strLine = br.readLine()) != null) {
    //splits to variable name, value
    String[] parsed = phrase.split("=");
    String name = parsed[0];
    double value = Double.parseDouble(parsed[1]);
    map.put(name, value);
}

Как уже упоминалось, вы должны перехватить NumberFormatException и обработать пропущенное '=' в зависимости от того, возможны ли они.

Если вы знаете все возможные поляВы можете использовать перечисление для имени поля.


Вместо использования карты вы можете использовать объект, который вы устанавливаете с помощью отражения.

class Config {
    double Rmax;
    double Rmin;
    // add more fields here.
}

Config config = new Config;
    while ((strLine = br.readLine()) != null) {
    //splits to variable name, value
    String[] parsed = phrase.split("=");
    try {
       String name = parsed[0];
       double value = Double.parseDouble(parsed[1]);
       Config.class.getField(name).setDouble(value);
    } catch (Exception e) {
       // log exception.
    }
}
2 голосов
/ 14 июня 2011

Вы можете прочитать его в объект Properties и выполнить преобразование оттуда:

Properties props = new Properties();
props.load( /* your file as InputStream */ );
Map<String, Double> parsed = new HashMap<String, Double>();
for(Map.Entry<Object, Object> entry : props.entrySet()){
    parsed.put(entry.getKey().toString(),
    Double.valueOf(entry.getValue().toString());
}
2 голосов
/ 14 июня 2011

Почему бы не использовать HashMap

С помощью хэш-карты вы можете установить значение ключа с любым типом, который вы хотите. В этом случае вы хотите

HashMap<String, Double> map = new HashMap<String,Double>()
1 голос
/ 14 июня 2011

Может быть вы хотите что-то вроде этого:

  String theName = parsed[0];
  double theValue = Double.parseDouble(parsed[1]);
...