【问题标题】:Convert single char in String to lower case将字符串中的单个字符转换为小写
【发布时间】:2009-05-12 14:17:01
【问题描述】:

我喜欢从 getter 方法中“猜测”属性名称。所以'getSomeAttribute'应该被转换成'someAttribute'。

通常我会做类似的事情

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

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

【问题讨论】:

  • 你为什么要猜变量名?
  • 对于大型应用程序,我想自动生成大量 wsdl 和 xml 模式,以便在现有 JMS 旁边放置一个 SOAP 接口。在这种情况下非常困难 - 我必须解析源文件并反映库......至少有一个(自定义)属性和 getter 命名约定,所以使用方法名称我可以测试或反映一些字段
  • 如果你可以使用反射,那么你可以得到实际的变量名。

标签: java


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    看看JavaBeans API

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

    另见decapitalize

    【讨论】:

      【解决方案3】:

      来自commons languncapitalize 会这样做:

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

      我需要很多 commons lang,但如果你不喜欢那个额外的 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();
      }
      

      【讨论】:

      • 这将产生“someattribute”而不是“someAttribute”。
      • 刚刚看到,通过建议 commons lang 解决了这个问题
      • 我想这就是我要做的。即使它是“引擎盖下”的相同解决方案。不能投票,因为我还没有足够的声望。所以请接受我冗长的赞许!
      【解决方案4】:

      值得记住;

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

      【讨论】:

        【解决方案5】:

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

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

        经过测试和功能:)

        【讨论】:

          【解决方案6】:

          我觉得不错。是的,它看起来很冗长,但请考虑您正在尝试做什么,以及如果其他程序员试图理解这段代码试图做什么,他们会怎么想。如果有的话,我会通过添加你正在做的事情(从 getter 方法猜测属性名称)作为评论来延长它。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-12-09
            • 2018-08-06
            • 2011-03-14
            • 1970-01-01
            相关资源
            最近更新 更多