问题描述
|
我有一个包含双打和字符串的组合的数据文件,如下所示:
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名称=值;
显然这条线
int parsed[0].toString() = parsed[1];
不起作用。我该怎么做?
解决方法
这个怎么样
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.
}
}
, 为什么不使用HashMap
使用哈希映射,您可以根据需要的类型来设置键值。在这种情况下
HashMap<String,Double>()
, 您可以将其读取到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());
}
, 也许您想要这样的东西:
String theName = parsed[0];
double theValue = Double.parseDouble(parsed[1]);