2015-09-24 31 views
0
String = "Success Entries and Failed Entries: {FAILED_ENTRIES=[], SUCCESS_ENTRIES=[1509230024960163905]}"; 

在這裏,我想篩選出只有在這裏,我想從這個字符串

SUCCESS_ENTRIES1509230024960163905

String str = "Success Entries and Failed Entries: {FAILED_ENTRIES=[], SUCCESS_ENTRIES=[1509230024960163905,1509181140480153332]}"; 
Matcher matcher = Pattern.compile("(?<=(SUCCESS_ENTRIES=\[)).+?(?=\])").matcher(str); 
matcher.find(); 
str = matcher.group(); 
System.out.println(str); 
matcher = Pattern.compile("(?<=\\d{3}=)\\d+").matcher(str); 
while (matcher.find()) { 
    System.out.println(matcher.group()); 
} 
} 

誰能幫我過濾掉sucess條目?

+0

請出示你到目前爲止做了什麼,一些代碼段將受到歡迎。一般而言,正則表達式是這類任務的正確工具。 – plamut

+0

String str =「成功條目和失敗條目:{FAILED_ENTRIES = [],SUCCESS_ENTRIES = [1509230024960163905,1509181140480153332]}」; \t \t匹配器匹配= Pattern.compile( 「(<=(SUCCESS_ENTRIES = \\ [))+(= \\。?])?」)匹配器(STR)。 \t \t matcher.find(); \t \t str = matcher.group(); \t \t System.out.println(str); (「<?\\ d {3} =)\\ d +」)。matcher(str); (matcher.find()){ \t \t while(matcher.find()){ \t \t System.out.println(matcher.group()); \t \t} \t} –

+0

@KamleshKanazariya您需要編輯您的問題以提供額外的細節。你不應該在註釋中發佈代碼塊。 – Lucky

回答

0

試試這個

String str = "Success Entries and Failed Entries: {FAILED_ENTRIES=[1509230024960163905], SUCCESS_ENTRIES=[1509230024960163905,1509181140480153332]}"; 
Pattern p = Pattern.compile("SUCCESS_ENTRIES=\\[(.*)\\]"); 
Matcher m = p.matcher(str); 
for(String s: m.group(1).split("[^0-9]+")) 
    if(!s.isEmpty()) 
     System.out.println(s); 
+0

可以解釋這條線str.split(「[^ 0-9] +」)它在術語或正則表達式 –

+0

方法做'split'是由正則表達式模式爲'字符串[]' 一個數字串分開:[0 -9] 非位:[^ 0-9] X,一次或多次X + 看到更多http://docs.oracle.com/javase/8/docs/api/java/util/regex/ Pattern.html 在我們的案例中,我們劃分'String'並且排除非數字 –

+0

在上面的代碼中,如果我把字符串這樣寫成「成功條目和失敗條目:{FAILED_ENTRIES = [15092300249601639051111],SUCCESS_ENTRIES = [1509181140480153332]}」;我也有FAILED_ENTRIES,但我不想獲得FAILED_ENTRIES。只有我想成功 –

0

這很容易我的朋友。你應該使用正則表達式模式。你可能會創建這樣的東西http://ideone.com/IRIeYg看看下面的例子。如果你不需要BigInteger,使用方便Integer.valueOf(..)

import java.util.*; 
import java.lang.*; 
import java.io.*; 
import java.math.BigInteger; 

class MyClass 
{ 
    public static void main (String[] args) throws java.lang.Exception 
    { 
     String str1 = "Success Entries and Failed Entries: {FAILED_ENTRIES=[], SUCCESS_ENTRIES=[1509230024960163905,1509181140480153332]}"; 
     String str2 = "Success Entries and Failed Entries: {FAILED_ENTRIES=[435435435], SUCCESS_ENTRIES=[1509230024960163912]}"; 
     String pattern = "(Success[\\s]*Entries[\\s]*and[\\s]*Failed[\\s]*Entries[\\:]+"+ 
       "[\\s]*['{']+FAILED_ENTRIES['=']+[\\[0-9\\]\\,]+[\\s]*" + 
       "SUCCESS_ENTRIES['=']+[\\[]+)?(([\\s]?[\\,]+[0-9]*)?[\\]\\}]+)?"; 
     BigInteger successEntires1 = new BigInteger(str1.replaceAll(pattern, "")); 
     BigInteger successEntires2 = new BigInteger(str2.replaceAll(pattern, "")); 
     System.out.println(successEntires1); 
     System.out.println(successEntires2); 
    } 
} 
+0

問題被修改了,所以你的例子不起作用, –

+0

@AlexandrDorokhin,哦,你說得對。我改變了我的例子。這很簡單。現在,每次只從SUCCESS_ENTRIES獲得第一個整數。 – Ivan