]> source.dussan.org Git - poi.git/commitdiff
follow-on to r1294180
authorYegor Kozlov <yegor@apache.org>
Mon, 27 Feb 2012 15:29:26 +0000 (15:29 +0000)
committerYegor Kozlov <yegor@apache.org>
Mon, 27 Feb 2012 15:29:26 +0000 (15:29 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1294186 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/ss/util/WorkbookUtil.java

index 8008844b8a0718d748dbd94c1cdd05cf7d20416d..71ad99e691e1d39963f2bc29b6cff4528be67f64 100644 (file)
@@ -45,40 +45,63 @@ public class WorkbookUtil {
         * @return a valid string, "empty" if to short, "null" if null         
         */
        public final static String createSafeSheetName(final String nameProposal) {
-               if (nameProposal == null) {
-                       return "null";
-               }
-               if (nameProposal.length() < 1) {
-                       return "empty";
-               }
-               final int length = Math.min(31, nameProposal.length());
-               final String shortenname = nameProposal.substring(0, length);
-               final StringBuilder result = new StringBuilder(shortenname);
-               for (int i=0; i<length; i++) {
-                       char ch = result.charAt(i);
-                       switch (ch) {
+               return createSafeSheetName(nameProposal, ' ');
+       }
+
+    /**
+     * Creates a valid sheet name, which is conform to the rules.
+     * In any case, the result safely can be used for
+     * {@link org.apache.poi.ss.usermodel.Workbook#setSheetName(int, String)}.
+     * <br>
+     * Rules:
+     * <ul>
+     * <li>never null</li>
+     * <li>minimum length is 1</li>
+     * <li>maximum length is 31</li>
+     * <li>doesn't contain special chars: : 0x0000, 0x0003, / \ ? * ] [ </li>
+     * <li>Sheet names must not begin or end with ' (apostrophe)</li>
+     * </ul>
+     *
+     * @param nameProposal can be any string, will be truncated if necessary,
+     *        allowed to be null
+     * @param replaceChar the char to replace invalid characters.
+     * @return a valid string, "empty" if to short, "null" if null
+     */
+    public final static String createSafeSheetName(final String nameProposal, char replaceChar) {
+        if (nameProposal == null) {
+            return "null";
+        }
+        if (nameProposal.length() < 1) {
+            return "empty";
+        }
+        final int length = Math.min(31, nameProposal.length());
+        final String shortenname = nameProposal.substring(0, length);
+        final StringBuilder result = new StringBuilder(shortenname);
+        for (int i=0; i<length; i++) {
+            char ch = result.charAt(i);
+            switch (ch) {
                 case '\u0000':
                 case '\u0003':
                 case ':':
-                               case '/':
-                               case '\\':
-                               case '?':
-                               case '*':
-                               case ']':
-                               case '[':
-                                       result.setCharAt(i, ' ');
-                                       break;
-                               case '\'':
-                                       if (i==0 || i==length-1) {
-                                               result.setCharAt(i, ' ');
-                                       }
-                                       break;
-                               default:
-                                       // all other chars OK
-                       }
-               }
-               return result.toString();
-       }
+                case '/':
+                case '\\':
+                case '?':
+                case '*':
+                case ']':
+                case '[':
+                    result.setCharAt(i, replaceChar);
+                    break;
+                case '\'':
+                    if (i==0 || i==length-1) {
+                        result.setCharAt(i, replaceChar);
+                    }
+                    break;
+                default:
+                    // all other chars OK
+            }
+        }
+        return result.toString();
+    }
 
     /**
      * Validates sheet name.