You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by jl...@apache.org on 2012/04/26 19:56:01 UTC

svn commit: r1330995 - /ofbiz/trunk/framework/base/src/org/ofbiz/base/util/StringUtil.java

Author: jleroux
Date: Thu Apr 26 17:56:01 2012
New Revision: 1330995

URL: http://svn.apache.org/viewvc?rev=1330995&view=rev
Log:
Some improvements in StringUtil class
* Add the possibility to use your own separator, not only "=" which stays the default
* I changed the default separator from "|" in some intermediary methods to null which was the default before my changes in r1212749.
* A new split method based on Pattern.compile(delim).split(str, limit). This allows to create a list of string, splitting only on the nth limit occurrences. This because StringTokenizer is deprecated, though I kept it as main split method
* some formatting also (my own way, more legible I think)

All this can notably be helpful when you deal with non encoded URLs...

Modified:
    ofbiz/trunk/framework/base/src/org/ofbiz/base/util/StringUtil.java

Modified: ofbiz/trunk/framework/base/src/org/ofbiz/base/util/StringUtil.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/base/src/org/ofbiz/base/util/StringUtil.java?rev=1330995&r1=1330994&r2=1330995&view=diff
==============================================================================
--- ofbiz/trunk/framework/base/src/org/ofbiz/base/util/StringUtil.java (original)
+++ ofbiz/trunk/framework/base/src/org/ofbiz/base/util/StringUtil.java Thu Apr 26 17:56:01 2012
@@ -188,13 +188,10 @@ public class StringUtil {
         List<String> splitList = null;
         StringTokenizer st = null;
 
-        if (str == null)
-            return splitList;
+        if (str == null) return splitList;
 
-        if (delim != null)
-            st = new StringTokenizer(str, delim);
-        else
-            st = new StringTokenizer(str);
+        if (delim != null) st = new StringTokenizer(str, delim);
+        else               st = new StringTokenizer(str);
 
         if (st != null && st.hasMoreTokens()) {
             splitList = FastList.newInstance();
@@ -206,6 +203,31 @@ public class StringUtil {
     }
 
     /**
+     * Splits a String on a delimiter into a List of Strings.
+     * @param str the String to split
+     * @param delim the delimiter character(s) to join on (null will split on whitespace)
+     * @param limit see String.split() method
+     * @return a list of Strings
+     */
+    public static List<String> split(String str, String delim, int limit) {
+        List<String> splitList = null;
+        String[] st = null;
+
+        if (str == null) return splitList;
+
+        if (delim != null) st = Pattern.compile(delim).split(str, limit);
+        else               st = str.split("\\s");
+
+        
+        if (st != null && st.length > 0) {
+            splitList = FastList.newInstance();
+            for (int i=0; i < st.length; i++) splitList.add(st[i]);
+        }
+        
+        return splitList;
+    }
+    
+    /**
      * Encloses each of a List of Strings in quotes.
      * @param list List of String(s) to quote.
      */
@@ -228,13 +250,28 @@ public class StringUtil {
      * @return a Map of name/value pairs
      */
     public static Map<String, String> strToMap(String str, String delim, boolean trim) {
+        return strToMap(str, delim, trim, null);
+        
+    }
+
+    /**
+     * Creates a Map from a name/value pair string
+     * @param str The string to decode and format
+     * @param delim the delimiter character(s) to join on (null will split on whitespace)
+     * @param trim Trim whitespace off fields
+     * @param pairsSeparator in case you use not encoded name/value pairs strings 
+     *        and want to replace "=" to avoid clashes with parameters values in a not encoded URL, default to "="
+     * @return a Map of name/value pairs
+     */
+    public static Map<String, String> strToMap(String str, String delim, boolean trim, String pairsSeparator) {
         if (str == null) return null;
         Map<String, String> decodedMap = FastMap.newInstance();
         List<String> elements = split(str, delim);
+        pairsSeparator = pairsSeparator == null ? "=" : pairsSeparator;
 
         for (String s: elements) {
-            List<String> e = split(s, "=");
 
+            List<String> e = split(s, pairsSeparator);
             if (e.size() != 2) {
                 continue;
             }
@@ -265,7 +302,7 @@ public class StringUtil {
      * @return a Map of name/value pairs
      */
     public static Map<String, String> strToMap(String str, boolean trim) {
-        return strToMap(str, "|", trim);
+        return strToMap(str, null, trim);
     }
 
     /**
@@ -284,7 +321,7 @@ public class StringUtil {
      * @return a Map of name/value pairs
      */
     public static Map<String, String> strToMap(String str) {
-        return strToMap(str, "|", false);
+        return strToMap(str, null, false);
     }
 
     
@@ -328,7 +365,7 @@ public class StringUtil {
         }
         return buf.toString();
     }
-
+    
     /**
      * Reads a String version of a Map (should contain only strings) and creates a new Map
      *