java - Parse a string into serval variables -
so have string can this:
update 12.7543.81 parma="dk.asterix.org" [denmark] (9.1) parmb="de.asterix.org" [germany] (1.0) called=49xxxxxxx (gbh) calling=45xxxxxxxx (loa) internal=0 state=2 update 12.7543.81 parmb="de.asterix.org" [germany] (1.0) parma="dk.asterix.org" [denmark] (9.1) called=49xxxxxxx (gbh) calling=45xxxxxxxx (loa) internal=0 state=2 update 12.7543.81 internal=0 state=2 parmb="de.asterix.org" [germany] (1.0) parma="dk.asterix.org" [denmark] (9.1) called=49xxxxxxx (gbh) calling=45xxxxxxxx (loa) update 12.7543.81 internal=0 state=2 parmb="de.asterix.org" [germany] (1.0) calling=45xxxxxxxx (loa) parma="dk.asterix.org" [denmark] (9.1) called=49xxxxxxx (gbh) all compleetly randomly added list, still follow 1 specific chunk pattern:
xxx = string ddd = decimal iii = integer chunk 1: update chunk 2: xxx.xxx.xxx chunk x: parma="xxx" [xxx] (ddd) chunk x: parmb="xxx" [xxx] (ddd) chunk x: calling=xxx (xxx) chunk x: called=xxx (xxx) chunk x: internal=iii chunk x: state=iii i wanted extract string data variables, regex don't random order, thinking of using split(" "), , cykle trough each word.
but thord before started doing that, ask if there way extract data?
idea seperate chunks example:
import java.util.arraylist; import java.util.list; public class test { final static string[] lines = new string[]{ "update 12.7543.81 parma=\"dk.asterix.org\" [denmark] (9.1) parmb=\"de.asterix.org\" [germany] (1.0) called=49xxxxxxx (gbh) calling=45xxxxxxxx (loa) internal=0 state=2", "update 12.7543.81 parmb=\"de.asterix.org\" [germany] (1.0) parma=\"dk.asterix.org\" [denmark] (9.1) called=49xxxxxxx (gbh) calling=45xxxxxxxx (loa) internal=0 state=2", "update 12.7543.81 internal=0 state=2 parmb=\"de.asterix.org\" [germany] (1.0) parma=\"dk.asterix.org\" [denmark] (9.1) called=49xxxxxxx (gbh) calling=45xxxxxxxx (loa)", "update 12.7543.81 internal=0 state=2 parmb=\"de.asterix.org\" [germany] (1.0) calling=45xxxxxxxx (loa) parma=\"dk.asterix.org\" [denmark] (9.1) called=49xxxxxxx (gbh)" }; public static void main(string[] args){ for(string line : lines){ string[] parms = splitparm(line); for(string parm : parms){ system.out.println(parm); } } } static public string[] splitparm(string text){ string[] textarr = text.split(" "); list<string> parms = new arraylist<>(); parms.add(textarr[0]); // update parms.add(textarr[1]); // 12.7543.81 for(int = 2;i<textarr.length;i++){ if(textarr[i].matches("^([a-za-z]+)=([\\s ]+)$")){ parms.add(textarr[i]); } else{ parms.set(parms.size()-1, parms.get(parms.size()-1) + " "+textarr[i]); } } return parms.toarray(new string[]{}); } }
one idea use separate regex each chunk - process each line using these expressions.
Comments
Post a Comment