diff options
author | Yegor Kozlov <yegor@apache.org> | 2012-02-27 15:29:26 +0000 |
---|---|---|
committer | Yegor Kozlov <yegor@apache.org> | 2012-02-27 15:29:26 +0000 |
commit | 95b56c8f7caa1ed8bee1a96d67bf3a4d5471ecb3 (patch) | |
tree | 73c3f1e069d79e6bcca96af55a3505f179064a3c /src/java/org/apache/poi/ss/util/WorkbookUtil.java | |
parent | f3d9f2bdd9469742f8a90eb55dece945830af0bd (diff) | |
download | poi-95b56c8f7caa1ed8bee1a96d67bf3a4d5471ecb3.tar.gz poi-95b56c8f7caa1ed8bee1a96d67bf3a4d5471ecb3.zip |
follow-on to r1294180
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1294186 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/java/org/apache/poi/ss/util/WorkbookUtil.java')
-rw-r--r-- | src/java/org/apache/poi/ss/util/WorkbookUtil.java | 85 |
1 files changed, 54 insertions, 31 deletions
diff --git a/src/java/org/apache/poi/ss/util/WorkbookUtil.java b/src/java/org/apache/poi/ss/util/WorkbookUtil.java index 8008844b8a..71ad99e691 100644 --- a/src/java/org/apache/poi/ss/util/WorkbookUtil.java +++ b/src/java/org/apache/poi/ss/util/WorkbookUtil.java @@ -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. |