过滤字符串输出/提取一个键值对

时间:2018-12-17 19:34:42

标签: java filter output extract

此:

txtTaxRate.setText(GetURLContent.getData(sURL));

输出以下内容:

{"taxrate":0.15,"year":2017,"developer":"","salary":10000.0,"status":"S"}

我如何仅输出税率(0.15)?这是JSON到字符串或键值对。我的教授说,这可以通过从输出中“一行”“获取”某些东西来完成,他说我已经接近了,但我真的不知道从这里去哪里。

3 个答案:

答案 0 :(得分:0)

您可以使用2种方法:inStr()substring()
您可以在这里找到它们:String class

使用此代码:

String str = "{\"taxrate\":0.15,\"year\":2017,\"developer\":\"\",\"salary\":10000.0,\"status\":\"S\"}";
String taxrate = str
        .substring(0, str.indexOf(","))
        .substring(str.indexOf(":") + 1);
System.out.println(taxrate);

将打印:

0.15

首先,获得直到","第一次出现的字符串。
然后在该子字符串中,得到":"之后的部分。

答案 1 :(得分:0)

如果您确定您的字符串将始终具有您所显示的格式,那么此行即可解决问题:

txtTaxRate.setText(GetURLContent.getData(sURL).substring(11, 15));

如果您不想使用幻数,可以使用indexOf and substring`的组合来实现,例如:

String data = GetURLContent.getData(sURL);
int fromIndex = data.indexOf("\"taxrate\":") + "\"taxrate\":".length();
int toIndex = data.indexOf(",\"year\"");
txtTaxRate.setText(data.substring(fromIndex, toIndex));

显然,这不是很漂亮。您可以使用JSON parser获得更通用的解决方案。

答案 2 :(得分:0)

GetURLContent.getData(sURL)返回一个txtTaxRate.setText()正在使用的字符串。现在,由于您正在获取字符串,因此您可以先将其转换为JSON,另一种简单的方法如下所示:

String s = GetURLContent.getData(sURL);
String[] arr = s.substring(1,s.length()-1).split(",");
String requiredText = Arrays.stream(arr).filter(s2 -> s2.contains("taxrate")).findFirst().get();

现在,当您执行System.out.println(requiredText );时,将看到输出"taxrate":0.15。 另外请注意,您需要java 8才能使用上述解决方案。