简体   繁体   中英

Extract last number after decimal

I am getting a piece of JSON text from a url connection and saving it to a string currently as such:

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

When I print str, I correctly find the data {"build":{"version_component":"1.0.111"}}

Now I want to extract the 111 from str, but I am having some trouble.

I tried String afterLastDot = inputLine.substring(inputLine.lastIndexOf(".") + 1);

but I end up with 111"}}

I need a solution that is generic so that if I have String str = {"build":{"version_component":"1.0.111111111"}}; the solution still works and extracts 111111111 (ie, I don't want to hard code extract the last three digits after the decimal point)

just use JSON api

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

Then just split and take the last element

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

Find the start and the end indexes of the String you need and 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);

If you cannot use a JSON parser then you can this regex based extraction:

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

RegEx Demo

^.* is greedy match that matches everything until last DOT and 1 or more digits that we put in group #1 to be used in replacement.

Please, your can try the following code : ... int index = inputLine.lastIndexOf(".")+1 ; String afterLastDot = inputLine.substring(index, index+3);

With Regular Expressions (Rexp), You can solve your problem like this ;

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()));
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM