Version 4.0.1: android compatibility
[nikiroo-utils.git] / src / be / nikiroo / utils / StringUtils.java
index acd632aa1968c50fa631131b3f9b216da6e2f001..1e9d7ed7463a6b2356677f9af0e158ff2b283820 100644 (file)
@@ -36,8 +36,7 @@ public class StringUtils {
                End
        }
 
-       static private Pattern marks = Pattern
-                       .compile("[\\p{InCombiningDiacriticalMarks}\\p{IsLm}\\p{IsSk}]+");
+       static private Pattern marks = getMarks();
 
        /**
         * Fix the size of the given {@link String} either with space-padding or by
@@ -146,7 +145,9 @@ public class StringUtils {
 
                if (removeAllAccents) {
                        input = Normalizer.normalize(input, Form.NFKD);
-                       input = marks.matcher(input).replaceAll("");
+                       if (marks != null) {
+                               input = marks.matcher(input).replaceAll("");
+                       }
                }
 
                input = Normalizer.normalize(input, Form.NFKC);
@@ -195,15 +196,15 @@ public class StringUtils {
         *            the time as a {@link String}
         * 
         * @return the number of milliseconds since the standard base time known as
-        *         "the epoch", namely January 1, 1970, 00:00:00 GMT
+        *         "the epoch", namely January 1, 1970, 00:00:00 GMT, or -1 in case
+        *         of error
+        * 
+        * @throws ParseException
+        *             in case of parse error
         */
-       static public long toTime(String displayTime) {
+       static public long toTime(String displayTime) throws ParseException {
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-               try {
-                       return sdf.parse(displayTime).getTime();
-               } catch (ParseException e) {
-                       return -1;
-               }
+               return sdf.parse(displayTime).getTime();
        }
 
        /**
@@ -300,6 +301,14 @@ public class StringUtils {
                                HtmlEscapeLevel.LEVEL_1_ONLY_MARKUP_SIGNIFICANT);
        }
 
+       /**
+        * Zip the data and then encode it into Base64.
+        * 
+        * @param data
+        *            the data
+        * 
+        * @return the Base64 zipped version
+        */
        public static String zip64(String data) {
                try {
                        return Base64.encodeBytes(data.getBytes(), Base64.GZIP);
@@ -309,6 +318,17 @@ public class StringUtils {
                }
        }
 
+       /**
+        * Unconvert from Base64 then unzip the content.
+        * 
+        * @param data
+        *            the data in Base64 format
+        * 
+        * @return the raw data
+        * 
+        * @throws IOException
+        *             in case of I/O error
+        */
        public static String unzip64(String data) throws IOException {
                ByteArrayInputStream in = new ByteArrayInputStream(Base64.decode(data,
                                Base64.GZIP));
@@ -321,4 +341,19 @@ public class StringUtils {
                        scan.close();
                }
        }
+
+       /**
+        * The "remove accents" pattern.
+        * 
+        * @return the pattern, or NULL if a problem happens
+        */
+       private static Pattern getMarks() {
+               try {
+                       return Pattern
+                                       .compile("[\\p{InCombiningDiacriticalMarks}\\p{IsLm}\\p{IsSk}]+");
+               } catch (Exception e) {
+                       // Can fail on Android...
+                       return null;
+               }
+       }
 }