Author: agiraudet Date: 2013-04-24 15:33:57 +0200 (Wed, 24 Apr 2013) New Revision: 598 Url: http://nuiton.org/projects/sandbox/repository/revisions/598 Log: ajout de la classe Parser : plusieurs methodes pour parser des chaines de caracteres Added: testEugeneUML-YAML/testsnakeyaml/src/main/java/parser/ testEugeneUML-YAML/testsnakeyaml/src/main/java/parser/Parser.java Modified: testEugeneUML-YAML/testsnakeyaml/pom.xml Modified: testEugeneUML-YAML/testsnakeyaml/pom.xml =================================================================== --- testEugeneUML-YAML/testsnakeyaml/pom.xml 2013-04-23 15:02:36 UTC (rev 597) +++ testEugeneUML-YAML/testsnakeyaml/pom.xml 2013-04-24 13:33:57 UTC (rev 598) @@ -14,6 +14,11 @@ <artifactId>snakeyaml</artifactId> <version>1.12</version> </dependency> + <dependency> + <groupId>org.nuiton.eugene</groupId> + <artifactId>eugene</artifactId> + <version>2.6.2</version> + </dependency> </dependencies> </project> \ No newline at end of file Added: testEugeneUML-YAML/testsnakeyaml/src/main/java/parser/Parser.java =================================================================== --- testEugeneUML-YAML/testsnakeyaml/src/main/java/parser/Parser.java (rev 0) +++ testEugeneUML-YAML/testsnakeyaml/src/main/java/parser/Parser.java 2013-04-24 13:33:57 UTC (rev 598) @@ -0,0 +1,179 @@ +package parser; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; + +public class Parser { + + public static String removeMultiChar(String str, List<Character> targets) + { + StringBuilder res = new StringBuilder(str.length()+1); + for(Character c : str.toCharArray()) + { + if(!targets.contains(c)) + { + res.append(c); + } + } + return res.toString(); + } + + public static String beforeChar(String str, Character target) + { + StringBuilder tmp = new StringBuilder(str.length()+1); + for(Character c : str.toCharArray()) + { + if(c.equals(target)) + { + return tmp.toString(); + } + else + { + tmp.append(c); + } + } + return tmp.toString(); + } + + //opt + public static String afterChar(String str, Character target) + { + StringBuilder in = new StringBuilder(str); + StringBuilder out = new StringBuilder(beforeChar(in.reverse().toString(),target)); + return out.reverse().toString(); + } + + public static String extract(Character start, Character end, String str) + { + StringBuilder tmp = new StringBuilder(str.length()+1); + boolean start_end = false; + for(Character c : str.toCharArray()) + { + if(!start_end && c.equals(start)) + { + start_end = true; + } + else if(start_end && c.equals(end)) + { + return tmp.toString(); + } + else if(start_end) + { + tmp.append(c); + } + } + return null; + } + + public static String extractPlus(Character start, Character end, String str) + { + StringBuilder tmp = new StringBuilder(str.length()+1); + boolean start_end = false; + int count = 0; + for(Character c : str.toCharArray()) + { + if(!start_end && c.equals(start)) + { + start_end = true; + } + else if(start_end && c.equals(start)) + { + count++; + tmp.append(c); + } + else if(start_end && c.equals(end)) + { + if(count>0) + { + count--; + tmp.append(c); + } + else + { + return tmp.toString(); + } + } + else if(start_end) + { + tmp.append(c); + } + } + return null; + } + + //opt + public static List<String> spaceParse(String str) + { + return charParse(str,' '); + } + + //opt + public static List<String> commaSpaceParse(String str) + { + ArrayList<Character> targets = new ArrayList<Character>(); + targets.add(' '); + targets.add(','); + return multiCharParse(str,targets); + } + + // fonctionnel/robuste/optimise + public static List<String> charParse(String str, Character target) + { + LinkedList<String> res = new LinkedList<String>(); + StringBuilder tmp = new StringBuilder(str.length()+1);//+1 utile en Java ? != C + boolean pre = false; + for(Character c : str.toCharArray()) + { + if(c.equals(target)) + { + if(pre) + { + res.add(tmp.toString()); + } + tmp.delete(0,tmp.length()); + pre = false; + } + else + { + tmp.append(c); + pre = true; + } + } + if(pre) + { + res.add(tmp.toString()); + } + return res; + } + + // fonctionnel/robuste/optimise + public static List<String> multiCharParse(String str, List<Character> targets) + { + LinkedList<String> res = new LinkedList<String>(); + StringBuilder tmp = new StringBuilder(str.length()+1);//+1 utile en Java ? != C + boolean pre = false; + for(Character c : str.toCharArray()) + { + if(targets.contains(c)) + { + if(pre) + { + res.add(tmp.toString()); + } + tmp.delete(0,tmp.length()); + pre = false; + } + else + { + tmp.append(c); + pre = true; + } + } + if(pre) + { + res.add(tmp.toString()); + } + return res; + } +}