该方法检查o对象的字段。如果字段值小于10个字符长,则必须附加相同的值,直到达到10个字符长。 但是使用此代码时,输出仅为以下内容:向字段的每个值写入10次,使值增加一倍。
所以,如果我有一个字段,例如String name = "John";
它写道:“JohnJohn”x10,但我想写一次“JohnJohnJohn”1次。
public void correctAtLeastTenCharsMegsértések(Object o) {
Class<?> objClass = o.getClass();
Field[] fields = objClass.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
Object value = field.get(o);
if (value instanceof String)
for (int i = 0; i < 10; i++)
if (((String) value).length() < 10) {
field.set(o, (String) value + value);
System.out.println((String) value + (String) value);
}
}
}
答案 0 :(得分:0)
这是因为您需要更新对象值的值。 值仍然包含旧数据。
Object value = field.get(o);
if(value instanceof String)
for(int i =0; i<10; i++)
if (((String)value).length() < 10){
field.set(o, (String)value + value);
System.out.println((String) value + (String) value);
value = field.get(o);
}
答案 1 :(得分:0)
首先从显示屏上单独处理值,一旦达到所需的结果,显示......
String value = ...;
StringBuilder sb = new StringBuilder(value);
while (sb.length() < 10) {
sb.append(value);
}
value = sb.toString();
field.set(o, value);
System.out.println(value);
而不是在循环中使用String
连接(字符串+字符串),这是非常低效的,你应该习惯使用StringBuilder
如果值必须正好为10个字符,则可以在while-loop
if (sb.length() > 10) {
sb.delete(10, sb.length());
}
将结果修剪为正好10个字符
虽然没有说明,但您可能还想添加0
长度String
的支票,以防万一...
答案 2 :(得分:0)
您可以使用以下内容:
public void correctAtLeastTenCharsMegsértések(Object o)
throws IllegalArgumentException, IllegalAccessException {
Class<?> objClass = o.getClass();
Field[] fields = objClass.getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
Object value = field.get(o);
if (value instanceof String) {
StringBuilder sb = new StringBuilder((String)value);
while (sb.length() > 0 && sb.length() < 10) {
sb.append(value);
}
field.set(o, sb.toString());
System.out.println(sb.toString());
}
}
}
首先我们得到该字段的value
。如果它的类型为String
,那么我们创建一个局部变量adaptedValue
来存储最终结果(包含至少10个字符的那个)。它最初设置为字段的值。然后,只要它小于10个字符,我们就会将值附加到此adaptedValue
。