将String中的单个char转换为小写

我喜欢从getter方法中“猜测”属性名称。 因此’getSomeAttribute’将转换为’someAttribute’。

通常我会做类似的事情

String attributeName = Character.toLowerCase(methodName.indexOf(3)) + methodName.substring(4); 

很难看,对吧? 我通常把它隐藏在一个方法中,但有人知道更好的解决方案吗?

我认为你的解决方案很好。 我不认为有任何更简单的方法来做到这一点。

Commons Lang的非资本化方法可以帮助你,但我不认为你的解决方案是如此粗糙。

看看JavaBeans API :

 BeanInfo info = Introspector.getBeanInfo(bean .getClass(), Object.class); for (PropertyDescriptor propertyDesc : info .getPropertyDescriptors()) { String name = propertyDesc.getName(); } 

另见decapitalize 。

从公共资源中获取资金可以做到:

 String attributeName = StringUtils.uncapitalize(methodName.substring(3)); 

我需要很多公共场所,但如果你不喜欢那个额外的jar子,你可以复制方法。 正如你在其中看到的那样,他们就像你一样:

 public static String uncapitalize(String str) { int strLen; if (str == null || (strLen = str.length()) == 0) { return str; } return new StringBuffer(strLen) .append(Character.toLowerCase(str.charAt(0))) .append(str.substring(1)) .toString(); } 

值得记住的是;

  • 并非所有getXXX方法都是getter,例如double getSqrt(double x),void getup()。
  • 返回boolean,以is开头并且不带参数的方法可以是getter,例如boolean isActive()。

给定一个字符缓冲区,您可以应用以下代码:

 int i = 0; for(char x : buffer) { buffer[i] = Character.toLowerCase(x); i++; } 

经测试和function:)

看起来很好。 是的,它看起来很冗长,但考虑一下你正在尝试做什么,以及另一个程序员如果想要了解这段代码试图做什么会想到什么。 如果有的话,我会通过添加您正在做的事情(从getter方法中猜测属性名称)作为注释来延长时间。