2009-05-12 38 views
14

Tôi thích 'đoán' tên thuộc tính từ các phương thức getter. Vì vậy, 'getSomeAttribute' sẽ được chuyển thành 'someAttribute'.Chuyển đổi đơn char trong Chuỗi thành chữ thường

Thường thì tôi làm điều gì đó như

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

Khá xấu xí, phải không? Tôi thường giấu nó trong một phương pháp, nhưng không ai biết một giải pháp tốt hơn?

+0

Tại sao các bạn cố gắng để đoán tên biến? – Milhous

+0

Đối với một ứng dụng lớn, tôi muốn tự động tạo một tập hợp lớn các lược đồ wsdl và xml để đặt một giao diện SOAP bên cạnh JMS hiện có. Khá khó khăn trong trường hợp này - Tôi phải phân tích các tệp nguồn và phản ánh các thư viện ... Ít nhất có một quy ước đặt tên (tùy chỉnh) cho các thuộc tính và getter, do đó, với tên phương pháp tôi có thể kiểm tra hoặc phản ánh một số trường –

+0

Nếu bạn có thể sử dụng refection , sau đó bạn có thể nhận được tên biến thực tế. – Milhous

Trả lời

13

Tôi nghĩ giải pháp của bạn là tốt. Tôi không nghĩ có cách nào dễ dàng hơn để làm điều đó.

4

Phương pháp uncapitalize của Commons Lang sẽ giúp bạn, nhưng tôi không nghĩ giải pháp của bạn quá thô.

3

uncapitalize từ commons lang sẽ làm điều đó:

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

Tôi cần commons lang rất nhiều, nhưng nếu bạn không thích điều đó jar thêm, bạn có thể sao chép phương pháp. Như bạn có thể thấy trong đó, họ làm điều đó giống như bạn:

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(); 
} 
+0

Điều này sẽ mang lại "someattribute" thay vì "someAttribute". –

+0

chỉ thấy, cố định bằng cách gợi ý commons lang –

+0

Tôi nghĩ đó là những gì tôi sẽ làm. Mặc dù nó là cùng một giải pháp 'dưới mui xe'. Không thể bỏ phiếu, vì tôi chưa đủ danh tiếng. Vì vậy, xin vui lòng chấp nhận ngón tay cái của tôi lên! –

0

Có vẻ ổn với tôi. Có, nó có vẻ tiết, nhưng hãy xem xét những gì bạn đang cố gắng làm, và những gì một lập trình viên khác sẽ nghĩ rằng nếu họ đang cố gắng để hiểu những gì mã này đang cố gắng làm. Nếu bất cứ điều gì, tôi muốn làm cho nó dài hơn, bằng cách thêm những gì bạn đang làm (đoán tên thuộc tính từ phương thức getter) như một bình luận.

3

Có một cái nhìn tại JavaBeans API:

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

Xem thêm decapitalize.

2

Điều đáng nhớ của nó;

  • không phải tất cả các phương pháp getXXX đều là getters, ví dụ: double getSqrt (double x), void getup().
  • các phương thức trả về boolean, bắt đầu bằng và không tham gia một đối số có thể là getter, ví dụ: boolean isActive().
2

Cho một bộ đệm ký tự, bạn có thể áp dụng vào mã bên dưới:

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

Tested và chức năng :)

Các vấn đề liên quan