Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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 不忽略额外参数的更严格的String.format?_Java_String_String Formatting - Fatal编程技术网

Java 不忽略额外参数的更严格的String.format?

Java 不忽略额外参数的更严格的String.format?,java,string,string-formatting,Java,String,String Formatting,Java的String.format自动忽略传递的额外参数,这些参数在格式字符串中未使用,但如果传递的参数较少或无效,则会失败。当传递更多参数时,有没有办法处理这种情况 如果参数多于格式说明符,则会忽略额外的参数 在不计算或分析%的情况下采用不同的方法。但这不是一个有效的方法 public static String safeFormat(String formatStr, Object... args) { List<Object> objects = Arrays.as

Java的
String.format
自动忽略传递的额外参数,这些参数在格式字符串中未使用,但如果传递的参数较少或无效,则会失败。当传递更多参数时,有没有办法处理这种情况

如果参数多于格式说明符,则会忽略额外的参数


在不计算或分析
%
的情况下采用不同的方法。但这不是一个有效的方法

public static String safeFormat(String formatStr, Object... args) {
    List<Object> objects = Arrays.asList(args);
    // https://commons.apache.org/proper/commons-lang/javadocs/api-3.7/org/apache/commons/lang3/mutable/MutableBoolean.html
    MutableBoolean isCalled = new MutableBoolean(false);
    objects.add(new Object(){
        @Override
        public String toString() {
            isCalled.setTrue();
            return "";
        }
    });
    //noinspection ResultOfMethodCallIgnored
    String.format(formatStr+" %s", objects.toArray());
    if(isCalled.isFalse()) {
        throw new IllegalArgumentException("Not all arguments used by formatter");
    }

    return String.format(formatStr, args);
}
publicstaticstringsafeformat(stringformatstr,Object…args){
List objects=Arrays.asList(args);
// https://commons.apache.org/proper/commons-lang/javadocs/api-3.7/org/apache/commons/lang3/mutable/MutableBoolean.html
MutableBoolean isCalled=新的MutableBoolean(false);
添加(新对象(){
@凌驾
公共字符串toString(){
isCalled.setTrue();
返回“”;
}
});
//无检查结果方法Callignored
format(formatStr+%s),objects.toArray();
if(isCalled.isFalse()){
抛出新的IllegalArgumentException(“并非格式化程序使用的所有参数”);
}
返回String.format(formatStr,args);
}

你能告诉我们你想处理哪种情况吗?@YCF\u L添加了示例你想对额外的参数做什么?你可以简单地计算以%、exclude%%开头的子字符串的实例,并检查结果数字是否与参数的长度匹配。这不是一个简单的问题。考虑这一点:<代码> String。格式化(“% 1美元%s 1美元S”,1, 2)< /代码>。是否因为
2
未使用而失败?关于
String.format(“%2$s”,1,2)
public static String safeFormat(String formatStr, Object... args) {
    List<Object> objects = Arrays.asList(args);
    // https://commons.apache.org/proper/commons-lang/javadocs/api-3.7/org/apache/commons/lang3/mutable/MutableBoolean.html
    MutableBoolean isCalled = new MutableBoolean(false);
    objects.add(new Object(){
        @Override
        public String toString() {
            isCalled.setTrue();
            return "";
        }
    });
    //noinspection ResultOfMethodCallIgnored
    String.format(formatStr+" %s", objects.toArray());
    if(isCalled.isFalse()) {
        throw new IllegalArgumentException("Not all arguments used by formatter");
    }

    return String.format(formatStr, args);
}