我有一个包含双打和字符串组合的数据文件,如下所示:
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());
}
}
现在我正在尝试初始化值,以便解析[0]成为整数的名称,解析后[1]成为值。相当于初始化程序 int name = value;
显然是行
int parsed[0].toString() = parsed[1];
不起作用。我该怎么做呢?
答案 0 :(得分: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。
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 :(得分:2)
为什么不使用HashMap
使用哈希映射,您可以使用您想要的类型设置键值。在这种情况下,你想要
HashMap<String, Double> map = new HashMap<String,Double>()
答案 2 :(得分: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());
}
答案 3 :(得分:1)
也许你想要这样的东西:
String theName = parsed[0];
double theValue = Double.parseDouble(parsed[1]);