2013-02-12 6 views
0

J'essaye d'analyser une chaîne qui a un motif spécifique. Un exemple de chaîne valide est la suivante:analyse syntaxique ou chaîne

<STX><DATA><ETX> 
<STX>A?123<ETX> 
<STX><DATA><ETX> 
<STX>name!xyz<ETX> 
<STX>age!27y<ETX> 
<STX></DATA><ETX> 
<STX>A?234<ETX> 
<STX><DATA><ETX> 
<STX>name!abc<ETX> 
<STX>age!24y<ETX> 
<STX></DATA><ETX> 
<STX>A?345<ETX> 
<STX><DATA><ETX> 
<STX>name!bac<ETX> 
<STX>age!22y<ETX> 
<STX></DATA><ETX> 
<STX>OK<ETX> 
<STX></DATA><ETX> 

Ces données sont expédiées par périphérique. Tout ce dont j'ai besoin est d'analyser cette chaîne avec id: 123 name: xyz, age 27y.

Je suis en train d'utiliser cette regex:

motif final regex = Pattern.compile; (, Pattern.DOTALL "(*).?")

cela ne sortie les données requises:

<ETX> 
<STX>A?123<ETX> 
<STX><DATA><ETX> 
<STX>name!xyz<ETX> 
<STX>age!27y<ETX> 
<STX> 

Comment puis-je boucle la chaîne récursive pour copier tous dans la liste des chaînes. J'essaye de faire une boucle et de supprimer le motif extrait mais il ne le supprime pas.

final Pattern regex = Pattern.compile("<DATA>(.*?)</DATA>", Pattern.DOTALL);// Q?(.*?) 
    final StringBuffer buff = new StringBuffer(frame); 
    final Matcher matcher = regex.matcher(buff); 
    while (matcher.find()) 
     { 
      final String dataElements = matcher.group(); 
      System.out.println("Data:" + dataElements); 
     } 
    } 

Y a-t-il d'autres façons de procéder?

C'est la sortie Je reçois actuellement:

Data:<DATA><ETX><STX>A?123<ETX><STX><DATA><ETX><STX>name!xyz<ETX><STX>age!27y<ETX><STX> </DATA> 
Data:<DATA><ETX><STX>name!abc<ETX><STX>age!24y<ETX><STX></DATA> 
Data:<DATA><ETX><STX>name!bac<ETX><STX>age!22y<ETX><STX></DATA> 

Je manque le 234 A et A 345 dans les deux prochains matches?.

+1

** PACK ** ?? .... et que voulez-vous faire avec cette question de string..your ne sait pas .. – Anirudha

+0

... ou l'analyse XML? – maerics

+1

Comment le motif '(. *?)' Appliqué sur la chaîne que vous avez fournie peut-il renvoyer une telle sortie? Ce n'est vraiment pas clair. Essayez d'appliquer le concept [SSCCE] (http://sscce.org/). – sp00m

Répondre

0

Je ne sais pas vraiment ce que vous voulez exactement à atteindre par cela, mais si vous voulez supprimer les occurences de ce modèle cette ligne:

buff.toString().replace(dataElements, "") 

ne semble pas bon. vous éditez juste la représentation de chaîne de ce buff. Vous devez à nouveau remplacer la version éditée dans le buff (après le casting).

+0

@ikshvak est-il donc résolu maintenant? – Hossein

+0

oui j'ai ajouté ma réponse ci-dessus. – Ikshvak

0

En utilisant cette regex permet de résoudre mon problème:

<STX>(A*)(.*?)<DATA>(.*?)</DATA>