现在我有:
for (String userPass : splitted) {
String user = userPass.split("=")[0];
String pass = userPass.split("=")[1];
config.put(user, pass);
}
适用于包含例如
的文件service1.password=dsjahdsahjk!sdafds
,但由于第二部分是密码,它也可以是:
service1.password=das-=asdwe=12f=
那么我的想法将惨败。什么是最好的方法,以确保我分裂的=
,而不是这个里面的密码?
您可以尝试以下操作,并向您的分割方法添加一个额外的参数limit
:
String pass = userPass.split("=", 2)[1];
您可以使用substring
。
for (String userPass : splitted) {
int firstEqualIndex = userPass.indexOf("=");
String user = userPass.substring(0, firstEqualIndex);
String pass = userPass.substring(firstEqualIndex + 1);
config.put(user, pass);
}
indexOf
总是返回第一个出现。因此,即使密码中有多个=
,它也可以工作。
你基本上得到了一个只有一个属性的属性文件:
import java.util.Properties;
import java.nio.file.Path;
import java.nio.file.Files;
import java.io.Reader;
public class Prop {
public static void main(String[] args) {
try (Reader in = Files.newBufferedReader(Path.of(args[0]))) {
Properties p = new Properties();
p.load(in);
System.out.println(p.get("service1.password"));
}
catch(Throwable t) {
t.printStackTrace();
}
}
}
输出:das-=asdwe=12f= is correct