2011-06-14 34 views
1

我有一個包含這樣的雙打和字符串組合的數據文件:()列表列出雙打的java

Rmax=2.3 
Rmin=1.0 

我使用分裂切出=這樣的:

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

現在,我試圖讓初始化值,這樣解析[0]變爲整數的名稱和解析[1]變成值。相當於初始化程序 int name = value;

明顯的線

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

不起作用。我如何去做這件事?

+0

你應該使用HashMap <字符串,雙>來滿足你的需求。 – Marcelo 2011-06-14 16:44:16

回答

3

這個怎麼樣

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的處理缺少「=」根據這些是否是可能的。

如果您知道所有可能的字段,您可以使用枚舉字段名稱。


除了使用Map之外,還可以使用通過反射設置的Object。

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. 
    } 
} 
+1

我會使用big-D'Double',這樣他就可以像其他人所建議的那樣將值放入一個'Map '中,但是'parseDouble()'是我會走的路。此外,如果等號的RHS上的值未被格式化爲數字(例如,「Rmax = 1s」或「Rmin = 2」或其他如此愚蠢的事物,則必須捕獲一個'NumberFormatException' )。 – 2011-06-14 16:48:44

2

爲什麼不使用HashMap

具有哈希映射可以設置鍵值你什麼都想要的類型。在這種情況下,你想

HashMap<String, Double> map = new HashMap<String,Double>() 
1

也許你想是這樣的:

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

你可以讀給一個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()); 
}