提取小数点后的最后一个数字

时间:2017-04-05 18:11:52

标签: java json regex substring

我从url连接获取一段JSON文本并将其保存为当前字符串:

...//setting up url and connection
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String str = in.readLine();

当我打印str时,我正确地找到了数据{"build":{"version_component":"1.0.111"}}

现在我想从str中提取111,但是我遇到了一些麻烦。

我试过了 String afterLastDot = inputLine.substring(inputLine.lastIndexOf(".") + 1);

但我最终得到了111"}}

我需要一个通用的解决方案,这样如果我有String str = {"build":{"version_component":"1.0.111111111"}};解决方案仍然有效并提取111111111(即,我不想硬编码提取小数点后的最后三位数)

5 个答案:

答案 0 :(得分:0)

只需使用JSON api

JSONObject obj = new JSONObject(str);
String versionComponent= obj.getJSONObject("build").getString("version_component");

然后分开并取出最后一个元素

versionComponent.split("\\.")[2];

答案 1 :(得分:0)

找到所需字符串的startend索引以及substring(start, end)

// String str = "{"build":{"version_component":"1.0.111"}};" cannot compile without escaping
String str = "{\"build\":{\"version_component\":\"1.0.111\"}}";

int start = str.lastIndexOf(".")+1;
int end = str.lastIndexOf("\"");
String substring = str.substring(start,end);

答案 2 :(得分:0)

如果您不能使用JSON解析器,那么您可以使用基于正则表达式的提取:

String lastNum = str.replaceAll("^.*\\.(\\d+).*", "$1");

RegEx Demo

^.*是贪婪匹配,匹配所有内容,直到最后一个DOT和我们放在组#1中的一个或多个数字用于替换。

答案 3 :(得分:0)

请您尝试以下代码: ... int index = inputLine.lastIndexOf("。")+ 1; String afterLastDot = inputLine.substring(index,index + 3);

答案 4 :(得分:-1)

使用正则表达式(Rexp), 你可以这样解决你的问题;

Pattern pattern = Pattern.compile("111") ;
Matcher matcher = pattern.matcher(str) ;
while(matcher.find()){
    System.out.println(matcher.start()+" "+matcher.end());
    System.out.println(str.substring(matcher.start(), matcher.end()));
}