2014-05-19 3 views
0

J'ai un robot qui extrait des données d'un site Web et je reçois la chaîne suivante:Java divisé chaîne en tableau

String s = "     --     Android 2.3.1 (Gingerbread) --      --      --     --       --      --      --     --     8" Wide LCD - tela sensível ao toque (resistiva) --     --     800 x 600 (4:3) --      --      --     --       --      --      --     --     1,2 GHz ARM Cortex A8 Core (RK2918) --    --     4 GB (Memória Flash) e DRAM 512 Mb, DDR3 --     --     Slot para cartão Micro SD (Máx. 32 GB) --    --     Integrado, suporta rotação de tela --    --     Sim --    --     Sim --    --     Suporte a multi idioma: Português, Inglês, Francês, Espanhol, Chinês --     --     Navegador para Internet, vídeo, foto e áudio players,e-mail, calculadora, gravador de áudio, suporte a e-book, etc. --    --       --      --      --     --     802.11 b/g/n (até 300 Mbps) --    --     2.1 --    --     USB 2.0 e Mini USB --    --       --      --      --     --     14,65 x 21,50 x 1,45 --     --     525g --       --      --     --     Recarregável, Litium (4700 mAh, 3,7 V) --"; 

Je NEET de diviser cette chaîne en un tableau, mais Discart les vides, donc je est-ce:

String sr[] = s.split(" -- "); 
List<String> list = new ArrayList<String>(Arrays.asList(sr)); 
list.removeAll(Arrays.asList("", null)); 

Mais je continue à obtenir le résultat suivant

[    ,    Android 2.3.1 (Gingerbread),     ,     ,    ,     ,     ,     ,    ,    8&quot; Wide LCD - tela sensível ao toque (resistiva),    ,    800 x 600 (4:3),     ,     ,    ,     ,     ,     ,    ,    1,2 GHz ARM Cortex A8 Core (RK2918),    ,    4 GB (Memória Flash) e DRAM 512 Mb, DDR3,    ,    Slot para cartão Micro SD (Máx. 32 GB),     ,    Integrado, suporta rotação de tela,     ,    Sim,    ,    Sim,    ,    Suporte a multi idioma: Português, Inglês, Francês, Espanhol, Chinês,    ,    Navegador para Internet, vídeo, foto e áudio players,e-mail, calculadora, gravador de áudio, suporte a e-book, etc.,    ,     ,     ,     ,    ,    802.11 b/g/n (até 300 Mbps),    ,    2.1,    ,    USB 2.0 e Mini USB,     ,     ,     ,     ,    ,    14,65 x 21,50 x 1,45,    ,    525g,     ,     ,    ,    Recarregável, Litium (4700 mAh, 3,7 V) --] 

Je veux dans le tableau que s tuff thats thats vide Ma conjecture est que c'est parce que les cordes ne sont pas vraiment vides et je reçois des choses vides de HTML que je ne peux pas me débarrasser.

Après avoir fait un s.split("\\s+(--\\s+)+"); Le tableau est de garder toujours la substance vide:

[, Android 2.3.1 (Gingerbread),  ,  ,  ,  ,  , 8&quot; Wide LCD - tela sensível ao toque (resistiva), 800 x 600 (4:3),  ,  ,  ,  ,  , 1,2 GHz ARM Cortex A8 Core (RK2918), 4 GB (Memória Flash) e DRAM 512 Mb, DDR3, Slot para cartão Micro SD (Máx. 32 GB), Integrado, suporta rotação de tela, Sim, Sim, Suporte a multi idioma: Português, Inglês, Francês, Espanhol, Chinês, Navegador para Internet, vídeo, foto e áudio players,e-mail, calculadora, gravador de áudio, suporte a e-book, etc.,  ,  ,  , 802.11 b/g/n (até 300 Mbps), 2.1, USB 2.0 e Mini USB,  ,  ,  , 14,65 x 21,50 x 1,45, 525g,  ,  , Recarregável, Litium (4700 mAh, 3,7 V) --] 
+0

Je préfère examiner votre robot d'exploration et vérifier comment il extrait cette chaîne. Vous pouvez probablement extraire ces éléments directement. – donfuxx

Répondre

5

Vous pouvez essayer ceci:

String sr[] = s.split("\\s+--\\s+"); 

Mettre "\\s+" prendra un nombre arbitraire d'espaces, au lieu de simplement " " qui est juste un espace (si vous voulez juste le caractère space à prendre en compte, remplacez \\s par un caractère littéral space). Si vous voulez éviter tous les éléments emply dans le tableau, essayez:

String sr[] = s.split("\\s+(--\\s+)+"); 

Avoir (--\\s+)+ signifie que même si le motif est répété, il les supprime tous.

+0

Eh bien, 'regex' ftw: D – displayname

+1

@ StefanR.Falk' regex' est toujours ftw: D – AntonH

+0

Je suis un résultat différent, mais les choses vides sont encore dans le tableau, mettra à jour le message original à afficher, je suppose comme je l'ai dit, ce n'est pas vraiment une chaîne vide –

0

Je pense que ce que vous recherchez est String.replace():

String sentence = "Hello World !"; 
String str = sentence.replace(" ", ""); 

System.out.println(str); 

Sortie:

HelloWorld! 
0

Vous pouvez appeler String#trim() sur la str dans le tableau, cela supprimerait tous les espaces blancs.

+0

'trim()' supprime les espaces de début et de fin, mais ce n'est pas vraiment ce que demande OP. – AntonH

0

Pour supprimer toutes les chaînes et celles qui ne contiennent que des espaces vides dans la liste:

Iterator<String> it = list.iterator(); 
while (it.hasNext()) { 
    String s = it.next(); 
    if (s.matches("^\\s*$")) { 
     it.remove(); 
    } 
} 
0

Essayez ceci:

String sr[] = s.split("--"); 
    List<String> list = new ArrayList<String>(Arrays.asList(sr)); 
    ArrayList<String> removeList = new ArrayList<String>(); 
    String curr; 
    for (int i=0; i < list.size(); i++) { 
     curr = list.get(i).trim(); 
     list.set(i, curr); 
     if (curr.length() == 0) 
      removeList.add(curr); 
    } 
    list.removeAll(removeList); 
    System.out.println(list); 
0
ArrayList<String> result = new ArrayList<String>(); 
String entries[] = s.split("--"); 
for(String entry:entries){ 
    String noSpace = entry.replaceAll(" ",""); 
    if(!noSpace.isEmpty()){ 
    result.add(noSpace); 
    } 
} 
return result; 

La chaîne se divisé par "-", alors chaque élément est ajouté au résultat, sauf s'il ne contient que des espaces.