我在一个看起来不漂亮的 Java Bean 中有几个属性。例如最大速度。有太多的属性让我不想在我的 HTML 文件中手动编写它们,所以它们看起来很漂亮。
当前输出:max_speed、min_speed
想要的输出:最大速度,最小速度
问题:如何将“max_speed”、“min_speed”和其他 20 个属性映射到“Max Speed”、“Min Speed”等,以获得漂亮的输出打印?每次我想将它们添加到网页时,这是否可行而无需手动编写它们?
在下面查看这些功能;
设置显示名称
public void setDisplayName(String givenProperty){
String displayName = null;
// Perform Some Operation to generate you display Name
// String [] tokens = givenProperty.split("_");
// displayName = tokens[0] + " " + tokens[1];
objectOfHashMap.put(givenProperty,displayName);
}
要获取 DisplayName:
public String getDisplayName(HashMap<String, String> givenHashMap, String givenProperty){
String outputString = null;
for(Map.Entry<String, String> pairs1 : givenHashMap.entrySet()){
if(givenProperty.equals((String)pairs1.getKey())){
outputString = pairs1.getValue();
}
}
return outputString;
}
让我知道,如果你有任何问题。
如果您编写一个需要字段名称(属性名称)并返回格式良好的输出的方法怎么办?
例如:
public String formatProperty(String propertyName, String userFriendlyLabel) {
Field someField = this.getClass().getField(propertyName);
Object value = null;
if(someField != null) {
value = someField.get(this);
}
return userFriendlyLabel + ": " + value;
}
我最终用这种方法来美化(如果允许作为一个词)我的属性,并为特殊情况添加一些 if else 语句。不能使用 switch case,因为 Java 1.6 显然不支持打开 String。注意来自 commons的WordUtils-package 。注意:请注意,这仅适用于我的特殊情况,其中所有属性名称都用下划线分隔。
public String niceDisplayName(String property) {
String[] tokens = property.split("_");
StringBuilder sb = new StringBuilder();
for (int i=0;i<tokens.length;i++) {
tokens[i] = WordUtils.capitalize(tokens[i]);
sb.append(tokens[i]);
if((i+1) < tokens.length) {
sb.append(" ");
}
}
return sb.toString();
}
下面显示的代码将适用于您的特定用例:如果该类中包含带有“_”的属性,它将返回特定类中定义的所有方法和属性的格式化名称。
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
public class ReplaceMethodNames {
/**
* @param args
*/
String max_speed;
String min_speed;
public static void main(String[] args) {
// Provide the class Name as parameter you may want to format
List<String> formattedNames =getFormattedProperties(ReplaceMethodNames.class);
System.out.println(formattedNames);
}
public static List<String> getFormattedNames(Class clazz){
List<String> formattedNames = new ArrayList<String>();
Method[] methods = clazz.getMethods();
for(Method method:methods){
String methodName = method.getName();
StringBuilder newMethodName = new StringBuilder();
for(int i = 0 ; i<methodName.length();i++){
if(methodName.charAt(i)=='_') {
newMethodName.append(' ');
newMethodName.append(Character.toUpperCase(methodName.charAt(i+1)));
i++;
}else if(i==0){
newMethodName.append(Character.toUpperCase(methodName.charAt(i)));
}else {
newMethodName.append(methodName.charAt(i));
}
}
if(methodName.contains("_")){
formattedNames.add(newMethodName.toString());
}
}
return formattedNames;
}
public static List<String> getFormattedProperties(Class clazz){
List<String> formattedNames = new ArrayList<String>();
Field[] fields = clazz.getDeclaredFields();
for(Field field:fields){
String methodName = field.getName();
StringBuilder newMethodName = new StringBuilder();
for(int i = 0 ; i<methodName.length();i++){
if(methodName.charAt(i)=='_') {
newMethodName.append(' ');
newMethodName.append(Character.toUpperCase(methodName.charAt(i+1)));
i++;
}else if(i==0){
newMethodName.append(Character.toUpperCase(methodName.charAt(i)));
}else {
newMethodName.append(methodName.charAt(i));
}
}
if(methodName.contains("_")){
formattedNames.add(newMethodName.toString());
}
}
return formattedNames;
}
public static void test_methodA(){}
public static void test_methodB(){}
public static void test_methodC(){}
public static void test_methodD(){}
}