//$Id: StringUtil.java,v 1.1 2006/08/02 00:52:57 chaostone Exp $
/*
*
* Copyright c 2005-2009.
*
* Licensed under GNU LESSER General Public License, Version 3.
* http://www.gnu.org/licenses
*
*/
/********************************************************************************
* @author chaostone
*
* MODIFICATION DESCRIPTION
*
* Name Date Description
* ============ ============ ============
* chaostone 2005-11-6 Created
*
********************************************************************************/
package org.beanfuse.lang;
import static java.lang.Character.isLowerCase;
import static java.lang.Character.isUpperCase;
import static java.lang.Character.toLowerCase;
/**
*
* @author chaostone 2005-11-15
*/
public final class StringUtil {
private StringUtil() {
}
/**
* count char in host string
*
* @param host
* @param charactor
* @return
*/
public static int countChar(final String host, final char charactor) {
int count = 0;
for (int i = 0; i < host.length(); i++) {
if (host.charAt(i) == charactor) {
count++;
}
}
return count;
}
/**
* count inner string in host string
*
* @param host
* @param searchStr
* @return
*/
public static int countStr(final String host, final String searchStr) {
int count = 0;
for (int startIndex = 0; startIndex < host.length(); startIndex++) {
int findLoc = host.indexOf(searchStr, startIndex);
if (findLoc == -1) {
break;
} else {
count++;
startIndex = findLoc + searchStr.length() - 1;
}
}
return count;
}
public static String insert(final String str, final String c, final int pos) {
if (str.length() < pos) {
return str;
}
return str.substring(0, pos - 1) + c + str.substring(pos);
}
/**
* replace [bigen,end] [1...end] with givenStr
* 可以使用StringBuilder的replace方法替换该方法
*
* @param str
* @param c
* @param begin
* @param end
* @return
*/
public static String insert(final String str, final String given, final int begin, final int end) {
if (begin < 1 || end > str.length() || end < begin) {
return str;
}
return str.substring(0, begin - 1) + given + str.substring(end);
}
public static String unCamel(String str, char seperator) {
return unCamel(str, seperator, true);
}
/**
* 将驼峰表示法转换为下划线小写表示
*
* @param str
* @return
*/
public static String unCamel(String str, char seperator, boolean lowercase) {
char[] ca = str.toCharArray();
if (3 > ca.length) {
return lowercase ? str.toLowerCase() : str;
}
// about five seperator
StringBuilder build = new StringBuilder(ca.length + 5);
build.append(lowercase ? toLowerCase(ca[0]) : ca[0]);
boolean lower1 = isLowerCase(ca[0]);
int i = 1;
while (i < ca.length - 1) {
char cur = ca[i];
char next = ca[i + 1];
boolean upper2 = isUpperCase(cur);
boolean lower3 = isLowerCase(next);
if (lower1 && upper2 && lower3) {
build.append(seperator);
build.append(toLowerCase(cur));
build.append(next);
i += 2;
} else {
if (lowercase && upper2) {
build.append(toLowerCase(cur));
} else {
build.append(cur);
}
lower1 = !upper2;
i++;
}
}
if (i == ca.length - 1) {
build.append(lowercase ? toLowerCase(ca[i]) : ca[i]);
}
return build.toString();
}
public static String unCamel(String str) {
return unCamel(str, '-', true);
}
}