/*
* Copyright 2004-2010 the Seasar Foundation and the Others.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
* either express or implied. See the License for the specific language
* governing permissions and limitations under the License.
*/
package org.slim3.util;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
/**
* A utility class for {@link String}.
*
* @author higa
* @version 3.0
*/
public final class StringUtil {
private static final String[] EMPTY_STRINGS = new String[0];
private StringUtil() {
}
/**
* Determines if the text is empty.
*
* @param text
* the text
* @return whether text is empty
*/
public static boolean isEmpty(String text) {
return text == null || text.length() == 0;
}
/**
* Decapitalizes the text according to JavaBeans specification.
*
* @param text
* the text
*
* @return the decapitalized text
*/
public static String decapitalize(String text) {
if (isEmpty(text)) {
return text;
}
char chars[] = text.toCharArray();
if (chars.length >= 2
&& Character.isUpperCase(chars[0])
&& Character.isUpperCase(chars[1])) {
return text;
}
chars[0] = Character.toLowerCase(chars[0]);
return new String(chars);
}
/**
* Capitalizes the text according to JavaBeans specification.
*
* @param text
* the text
*
* @return the capitalized text
*/
public static String capitalize(String text) {
if (isEmpty(text)) {
return text;
}
char chars[] = text.toCharArray();
chars[0] = Character.toUpperCase(chars[0]);
return new String(chars);
}
/**
* Splits the text by the delimiter.
*
* @param text
* the text
* @param delim
* the delimiter
* @return the array of strings
*/
public static String[] split(String text, String delim) {
if (isEmpty(text)) {
return EMPTY_STRINGS;
}
List<String> list = new ArrayList<String>();
StringTokenizer st = new StringTokenizer(text, delim);
while (st.hasMoreTokens()) {
list.add(st.nextToken());
}
return list.toArray(new String[list.size()]);
}
/**
* Splits the array of bytes.
*
* @param str
* the string
* @param size
* the piece size
* @return the split result.
* @throws NullPointerException
* if the str parameter is null
* @throws IllegalArgumentException
* if the size parameter is less than 1
*/
public static String[] split(String str, int size)
throws NullPointerException, IllegalArgumentException {
if (str == null) {
throw new NullPointerException("The str parameter is null.");
}
if (size <= 0) {
throw new IllegalArgumentException(
"The size parameter must be more than 0.");
}
int num = str.length() / size;
int mod = str.length() % size;
String[] ret = mod > 0 ? new String[num + 1] : new String[num];
for (int i = 0; i < num; i++) {
ret[i] = str.substring(i * size, (i + 1) * size);
}
if (mod > 0) {
ret[num] = str.substring(num * size);
}
return ret;
}
/**
* Joins the array of strings.
*
* @param array
* the array of strings
* @return the joined string
* @throws NullPointerException
* if the array parameter is null or if the array contains null
* element
*/
public static String join(String[] array) throws NullPointerException {
if (array == null) {
throw new NullPointerException("The array parameter is null.");
}
int count = 0;
for (String s : array) {
if (s == null) {
throw new NullPointerException(
"The array contains null element.");
}
count += s.length();
}
StringBuilder sb = new StringBuilder(count);
for (String s : array) {
sb.append(s);
}
return sb.toString();
}
/**
* Converts the object into string.
*
* @param o
* the object
* @return string
*/
public static String toString(Object o) {
return o == null ? null : o.toString();
}
}