關於核心代碼StringUtil裏首字母大小寫的bug

源碼:

/**
* 首字母大寫
* @param realName
* @return
*/
public static String firstUpperCase(String realName) {
return StringUtils.replaceChars(realName, realName.substring(0, 1),realName.substring(0, 1).toUpperCase());
}

/**
* 首字母小寫
* @param realName
* @return
*/
public static String firstLowerCase(String realName) {
return StringUtils.replaceChars(realName, realName.substring(0, 1),realName.substring(0, 1).toLowerCase());
}

在某些情況下格式化會出錯.
e.g. CmsController 格式化 出來是 cmscontroller

附上自己寫的一段代碼....自我覺得可用,但是不保證是最優,處女座的可以略過


/**
* 首字母大寫
* @param realName
* @return 非null,則表示已經轉換完成
* <br />
* date & time: 2015-4-4 / 下午11:43:19 <br />
* author: <a href="http://chris-rock-f0.iteye.com/">chris</a>
*/
public static String firstUpperCase(String realName) {

Boolean flag = StringUtil.isUpperOrLowerCase(realName.charAt(0));
if (flag != null && !flag) {//是字母,而且是小寫字母
char[] cs = realName.toCharArray();
StringBuffer stringBuffer = new StringBuffer();
int i = 0;
for (char c : cs) {
if (i++ == 0) {
char temp = (char) (c - 32);
stringBuffer.append(String.valueOf(temp));
}else {
stringBuffer.append(String.valueOf(c));
}
}

return stringBuffer.toString();

}else if(flag != null && flag){//是字母,而且也是大寫字母
return realName;
}else {
return null;
}
}

/**
* 首字母小寫
* @param realName
* @return 非null,則表示已經轉換完成
* <br />
* date & time: 2015-4-4 / 下午11:44:36 <br />
* author: <a href="http://chris-rock-f0.iteye.com/">chris</a>
*/
public static String firstLowerCase(String realName) {
Boolean flag = StringUtil.isUpperOrLowerCase(realName.charAt(0));
if (flag != null && flag) {//是字母,而且是大寫字母
char[] cs = realName.toCharArray();
StringBuffer stringBuffer = new StringBuffer();
int i = 0;
for (char c : cs) {
if (i++ == 0) {
char temp = (char) (c + 32);
stringBuffer.append(String.valueOf(temp));
}else {
stringBuffer.append(String.valueOf(c));
}
}

return stringBuffer.toString();

}else if(flag != null && !flag){//是字母,而且也是小寫字母
return realName;
}else {
return null;
}
}

/**
* 是大寫還是小寫字母
* @param c 字符
* @return <br />
* <ol>
* <li>true: 大寫</li>
* <li>false: 小寫 </li>
* <li>null: 不是字母</li>
* </ol>
* <br />
* date & time: 2015-4-4 / 下午11:27:24 <br />
* author: <a href="http://chris-rock-f0.iteye.com/">chris</a>
*/
public static Boolean isUpperOrLowerCase(char c){

int cint = c - 0;

if (cint <= 90 && cint >= 65) {//大寫字母
return true;
}else if (cint <= 122 && cint >= 97) {//小寫字母
return false;
}else {
return null;
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章