拆分字符串,可以包含分隔符



现在我有:

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

最新更新