1 package com.imcode.util; 2 3 import org.apache.commons.lang.StringEscapeUtils; 4 import org.apache.commons.lang.StringUtils; 5 6 import java.util.ArrayList; 7 import java.util.List; 8 import java.util.regex.Pattern; 9 10 public class KeywordsParser { 11 12 public String[] parseKeywords( String keywordsString ) { 13 List keywords = new ArrayList(); 14 StringBuffer currentKeyword = new StringBuffer(); 15 boolean insideString = false; 16 for ( int i = 0; i < keywordsString.length(); ++i ) { 17 char c = keywordsString.charAt( i ); 18 if ( '"' == c ) { 19 insideString = !insideString; 20 } else if ( isKeywordCharacter(c) || insideString ) { 21 currentKeyword.append( c ); 22 } else if ( 0 < currentKeyword.length() ) { 23 keywords.add( currentKeyword.toString() ); 24 currentKeyword.setLength( 0 ); 25 } 26 } 27 if ( 0 < currentKeyword.length() ) { 28 keywords.add( currentKeyword.toString() ); 29 } 30 return (String[])keywords.toArray( new String[keywords.size()] ); 31 } 32 33 protected boolean isKeywordCharacter(char c) { 34 return Character.isLetterOrDigit( c ); 35 } 36 37 public String formatKeywords ( String[] keywords ) { 38 39 for ( int i = 0; i < keywords.length; i++ ) { 40 if (Pattern.compile("[^//p{L}//d]").matcher(keywords[i]).find()) { 41 keywords[i] = '"'+keywords[i]+'"' ; 42 } 43 } 44 return StringUtils.join( keywords, ", " ) ; 45 } 46 47 48 }