2017-04-05 77 views
2

我是從一個URL連接得到了一塊JSON文本的,目前保存到一個字符串,例如:提取最後小數

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

當我打印的海峽,我找到正確的數據{"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 –

+1

json.getBuild.getVersion_component –

回答

0

如果您不能使用JSON解析器,那麼你可以這樣基於正則表達式提取:

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

RegEx Demo

^.*是貪婪的匹配,匹配所有的東西,直到最後一個DOT和我們放入組#1中的一個或多個數字用於替換。

+0

如果str包含1.0,該怎麼辦。111多一次? – user648026

+1

@ user648026:OP想要提取*小數點後的最後一個數字* – anubhava

0

只是使用JSON API

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

然後就分開,並採取最後一個元素

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

我認爲OP只需要追蹤111. – 2017-04-05 18:16:58

+0

這是錯誤的。首先,他的代碼中的'str'使0感覺! –

+0

另外你給1.0.111 –

0

找到字符串的startend指標需要和:

// 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); 
+0

如果str包含1.0.111多一次呢? – user648026

-1

目前已經有一些人給了迴應,但這樣你可以得到你的結果

JSONObject jsonObject = new JSONObject(); 
    String str = "{\"build\":{\"version_component\":\"1.0.1111111111111111111\"}}"; 
    JSONParser parser = new JSONParser(); 
    JSONObject json = (JSONObject)parser.parse(str); 
    JSONObject jsonObj = (JSONObject)json.get("build"); 
    String json1 = (String)jsonObj.get("version_component"); 
    String data[]=json1.split("\\."); 
    System.out.println(data[2]); 
0

請,你可以試試下面的代碼: ... INT指數= inputLine.lastIndexOf(「」) +1; String afterLastDot = inputLine.substring(index,index + 3);

-1

With Regular Expressions(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())); 
} 
+0

我對硬編碼答案不感興趣,如我的問題所述 –