Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 追加字符串值,直到长度至少达到10个字符_Java - Fatal编程技术网

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

Java 追加字符串值,直到长度至少达到10个字符,java,Java,该方法检查o对象的字段。如果字段值长度小于10个字符,则必须附加相同的值,直到长度达到10个字符。 但是,对于这段代码,输出仅为以下内容:将字段的每个值加倍10次写入控制台 因此,如果我有一个字段,例如String name=John; 它写着:johnjohnx10,但我想写一次 public void correctAtLeastTenCharsMegsértések(Object o) { Class<?> objClass = o.getClass(); F

该方法检查o对象的字段。如果字段值长度小于10个字符,则必须附加相同的值,直到长度达到10个字符。 但是,对于这段代码,输出仅为以下内容:将字段的每个值加倍10次写入控制台

因此,如果我有一个字段,例如String name=John; 它写着:johnjohnx10,但我想写一次

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);
                }

    }
}

这是因为需要更新对象值的值。 值仍然包含旧数据

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);
                       }

首先,将数值与显示分开处理,一旦获得所需的结果,显示

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);
这将使结果精确到10个字符长


虽然没有说明,但您可能还需要为长度为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());
        }

    }
}

首先我们得到字段的值。如果它是String类型,那么我们创建一个局部变量adaptedValue来存储最终结果,即至少包含10个字符的结果。它最初设置为字段的值。然后,只要该值少于10个字符,我们就会将该值附加到此adaptedValue中。

我不知道您的问题是什么。是的,但如果条件是check on value,它仍然保留旧的引用。它需要有新的参考,它工作正常,我检查过了@azurefrog@JimGarrison:它将进入一个无限循环。你可以按照我写的方式检查它,请在它工作时进行投票。是的,while循环在这里是一个无限循环,我试过了also@REPARATUR:你能检查一下我提到的方法吗?如果它适合你,请将其标记为合适。编辑你的帖子并包括你的解释。这样更有帮助;1-应避免循环内的字符串连接;2-一根绳子;2-&不起作用,它是一个按位运算符,而不是一个布尔运算符,用于校正。我修正了输入错误(&T)。还将字符串连接替换为使用StringBuilder
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());
        }

    }
}