追加字符串值,直到达到至少10个字符长

时间:2014-06-10 21:27:36

标签: java

该方法检查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);
                }

    }
}

3 个答案:

答案 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