2014-12-18 62 views
0

我有這個字符串從JSON獲得如何使用正則表達式從字符串中獲取數字?

[23,22,17][17,2][23][3,29][][10,43,6][7][32,17,6][][][23,49,12][14,40,15][34,41,32][4,7,19][9,27][17][31,36,45][][32][40,27,25] 

和我保存它變成ArrayList中是這樣的:

ArrayList<?> listAdress=(ArrayList<?>)jobj.get("adress"); 

我想只拿數字和括號內數字保存到這樣的載體。

v[]={23,22,18} 
v[]={17,2} 

我試圖讓只有數字,但我不知道如何利用這些數字,直到你找到]

有人知道如何?

+0

'listAdress.get(0)是字符串「[23,22,17]」'? – Kent 2014-12-18 22:40:54

+0

'^ [\,\ [\]]?(([0-9] *)[\,\ [\]] *)*?$' – Jason 2014-12-18 22:46:13

+0

對於第一個問題,我收到錯誤: 'java.lang。 IndexOutOfBoundsException:索引:0,大小:0' 而第二個不給我我想要的 – 2014-12-18 22:49:56

回答

0

這個怎麼樣:

public static void main(String[] args) { 
    String testStr = "[23,22,17][17,2][23][3,29][][10,43,6][7][32,17,6][][][23,49,12][14,40,15][34,41,32][4,7,19][9,27][17][31,36,45][][32][40,27,25]"; 
    ArrayList<String[]> result = new ArrayList<>(); 
    String[] resTmp = testStr.split("\\[|\\]\\["); // First split input into vectors 

    for (String vecDef: resTmp) // Then split each vector into a String[] 
     result.add(vecDef.split(",")); 

    for (String[] s : result) { // result = ArrayList with an element for each vector 
     for (String ss : s)  // Each element is an array of Strings each being a number 
      System.out.print(ss + " "); 

     System.out.println(); 
    } 
} 
0

我知道你問一個正則表達式,但我不知道它是唯一的或去這樣一個簡單的解析的最佳途徑。

這裏快速(和不那麼安全的)代碼:

public class HelloWorld{ 

    public static void main(String []args){ 
     String input = "[23,22,17][17,2][23][3,29][][10,43,6][7][32,17,6][][][23,49,12][14,40,15][34,41,32][4,7,19][9,27][17][31,36,45][][32][40,27,25]"; 
     input = input.substring(1, input.length()-1); 
     String[] vectors = input.split("\\]\\["); 

     for(String vector : vectors) 
     { 
      System.out.println(String.format("\"%s\"", vector)); 
     } 
    } 
} 

輸出:

"23,22,17"
"17,2"
"23"
"3,29"
""
"10,43,6"
"7"
"32,17,6"
""
""
"23,49,12"
"14,40,15"
"34,41,32"
"4,7,19"
"9,27"
"17"
"31,36,45"
""
"32"
"40,27,25"

的事情是:你必須確保作爲輸入提供的字符串總是很好格式化(以[[以a結尾]開頭,並由以[開頭並且以...結尾]開頭的段組成)。然而,它與正則表達式幾乎是一樣的(無效輸入=無輸出,或部分輸出)。

一旦你用逗號分隔的數字你的字符串,該作業的其餘部分很容易(你可以再次分裂,然後解析爲整數)。

1

這裏是您需要爲您的問題正則表達式:

(\d*,*)* 

一個鏈接,這個表達式

這裏的explanation遵循Java方法來獲取數字的數組:

public static List<String []> getNumberArrays (String toBeProcessed){ 
     List<String[]> listOfArrays = new ArrayList<String[]>(); 
     Pattern p = Pattern.compile("(\\d*,*)*"); 
     Matcher m = p.matcher(toBeProcessed); 
     while(m.find()){ 
      String[] a ; 
      a =m.group(0).split(","); 
      // next statement for avoiding the printing of empty arrays 
      if(a.length>=2) 
       listOfArrays.add(a); 
     } 
     return listOfArrays; 

    } 

測試代碼:

String x = "[23,22,17][17,2][23][3,29][][10,43,6][7][32,17,6][][][23,49,12][14,40,15][34,41,32][4,7,19][9,27][17][31,36,45][][32][40,27,25]" ; 
    List<String[]> listOfArrays = new ArrayList<String[]>(); 
    listOfArrays = getNumberArrays(x); 
    for(String[] a :listOfArrays){ 
     System.out.println(Arrays.toString(a)); 
    } 

輸出:

[23, 22, 17] 
[17, 2] 
[3, 29] 
[10, 43, 6] 
[32, 17, 6] 
[23, 49, 12] 
[14, 40, 15] 
[34, 41, 32] 
[4, 7, 19] 
[9, 27] 
[31, 36, 45] 
[40, 27, 25] 
0
public void importarCorreos() throws Exception{ 
     @SuppressWarnings("deprecation") 
     ClientRequest cr = new  ClientRequest("http://di002.edv.uniovi.es/~delacal/tew/1415/practica02/servicio_correos.php"); 

     @SuppressWarnings("deprecation") 
     String result = cr.get(String.class).getEntity(String.class); 

     CorreosService service = Factories.services.createCorreosService(); 
     //Imprimimos todo el flujo JSON recibido en formato cadena. 
     System.out.println(result); 
     //Procesamos el texto JSON y lo pasamos a formato SIMPLE-JSON 
     Object obj=JSONValue.parse(result); 
     JSONArray correos = (JSONArray)obj; 
     ListIterator li = correos.listIterator(); 
     while(li.hasNext()){ 
      JSONObject jobj =(JSONObject) li.next(); 
      Correo c = new Correo(); 
      c.setFechaHora(Long.parseLong(jobj.get("fechahora").toString())); 
      c.setAsunto(jobj.get("asunto").toString()); 
      c.setCuerpo(jobj.get("cuerpo").toString()); 
      c.setCarpeta(Integer.parseInt(jobj.get("carpeta").toString())); 
      c.setLogin_user(usuario.getLogin()); 
      ArrayList<?> listaDestinatarios=(ArrayList<?>)jobj.get("destinatarios"); 
      service.saveCorreo(c); 

     } 

    } 

這是我的職責,主要是我得到一個JSON從這個網址的郵件。我使用該網址中的字段創建了一封新郵件。但是,來自Mails類的字段之一是mail_contacts,您應該將每個聯繫人的地址保存爲一個向量[1,2,3],這是來自地址的id。

那麼,怎樣才能我得到的數字爲[],並把它保存到田間mail_contacts什麼它的一個陣列。

我可以將它保存這樣的:

 c.setMailAdress(Here i want an array with the numbers from each []) 
0

@ulix

好吧,這給出口,我想:

00:53:20,413 INFO [stdout](默認任務-6)23 22 17

00:53:20414 INFO [標準輸出](默認任務-6)17 2

00:53:20414 INFO [標準輸出](默認任務-6)23

00:53:20416 INFO [標準輸出](默認任務-6)3 29

00:53:20416 INFO [標準輸出](默認任務-6)

00:53:20417 INFO [標準輸出](默認任務-6)10 43 6

但我想將每個位置從字符串保存到數組中t,像int v [] = {23,22,17}

相關問題