我从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(即,我不想硬编码提取小数点后的最后三位数)
答案 0 :(得分:0)
只需使用JSON api
JSONObject obj = new JSONObject(str);
String versionComponent= obj.getJSONObject("build").getString("version_component");
然后分开并取出最后一个元素
versionComponent.split("\\.")[2];
答案 1 :(得分:0)
找到所需字符串的start
和end
索引以及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");
^.*
是贪婪匹配,匹配所有内容,直到最后一个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()));
}