关于核心代码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;
		}
	}

你可能感兴趣的:(jeecg)