【紧急求组】一行string中key=value,有何工具类可以直接取值?

【紧急求组】一行string中key=value,有何工具类可以直接取值?

我想实现:一行string中,利用工具类直接就可以取值。例如“fastJson”那种效果,一行String的格式:key=value(换行符号)key=value(换行符号)....

请问有相关的工具类或者什么方法可以直接取值吗?

自己写的方法还是有些情况用不上,请拖到最下。

try {
	FileReader fr = new FileReader(openFile);
	BufferedReader bf = new BufferedReader(fr);
	String str;
	// 按行读取字符串
	while ((str = bf.readLine()) != null) {
		// 把这行进行入取
		Properties properties = new Properties();
		properties.load(new ByteArrayInputStream(str.getBytes("UTF-8")));
		System.out.println("读取skill_id:" + properties.get("skill_id"));
	}
	bf.close();
} catch (IOException e1) {
	// TODO Auto-generated catch block
	e1.printStackTrace();
}

image.png

读取skill_id:32032
读取skill_id:null
读取skill_id:null
读取skill_id:null
读取skill_id:null
读取skill_id:null
读取skill_id:null
读取skill_id:null
读取skill_id:null

自己写了一个方法,但还是有一些地方有问题:

例如:image.png

	<skill skillName="Greater Windy Healing Potion" skillId="17920" skillLvl="1" getLevel="68" learnedByNpc="true">

这行代码中,存在“skillName也存在空格”,我的方法就不好用了。

public Ret getKeyAndValue(String str) {
	List<String> resultIds = Splitter.on("	").on(" ").trimResults()
			.splitToList(str.replaceAll("\\[", "").replaceAll("]", ""));
	Ret ret = Ret.create();
	for (String string : resultIds) {
		if (string.contains("=")) {
			String[] s = string.split("=");
			if (s.length == 2) {
				ret.set(s[0], s[1]);
			}
		}
	}
	return ret;
}


评论区

JFinal

2020-02-08 18:46

自己写个解析程序,可以配合正则表达式

如果你的每对 key value 之间的分隔符没有统一的话,可以先利用 JDK 中的 String.replaceAll(String regex, String replacement) 方法,将分隔符统一,例如统一成 "###":
str = str.repalceAll(regex, "###");
String[] keyValueArray = str.split("###");

上面两步就将所有 key value 全放到数组里头去了,然后你再利用:
kv.splite("=")
就可以将 key value 分离出来了

注意这些事都与 jfinal 无关

fmpoffice

2020-02-08 19:11

@JFinal 谢谢老大,希望老大考虑开设一个java区给我们这些小菜讨论其他技术,目前只泡这个站啊哈!~

JFinal

2020-02-08 19:22

最好的办法是规范数据,传输过来的数据要严格限定格式

热门反馈

扫码入社