关于核心代码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,则表示已经转换完成
*

* date & time: 2015-4-4 / 下午11:43:19

* author: chris
*/
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,则表示已经转换完成
*

* date & time: 2015-4-4 / 下午11:44:36

* author: chris
*/
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

*

    *
  1. true: 大写

  2. *
  3. false: 小写

  4. *
  5. null: 不是字母

  6. *

*

* date & time: 2015-4-4 / 下午11:27:24

* author: chris
*/
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;
}
}

你可能感兴趣的:(JEECG)