优雅等同于Java中的C的vsscanf()

时间:2013-01-03 23:28:47

标签: java parsing variadic-functions scanf

我需要在Java中使用等效于C的vsscanf()。更详细,我在这里:

private void parseString(String parseMe, String format, Object[] args) {
    // something like: vsscanf(parseMe, format, args);
}

请注意,我确实已阅读about an equivalent for sscanf(),因此可以从那里轻松完成。但我问自己,是否有一个更优雅的解决方案,而不是用for循环填充args。

此外,如果解决方案允许使用varargs而不是数组也会很好。见下文。

parseString(str, format, x, y, z);

1 个答案:

答案 0 :(得分:2)

您可以使用java.text.MessageFormat。例如:

public static void main(String[] args) throws ParseException {
    String input="hello 1:2.3.4";
    MessageFormat form = new MessageFormat("{0} {1,number}:{2,number,integer}.{3,number}");
    Object[] data = form.parse(input);
    for(Object o : data) {
        System.out.println(o.getClass()+" : "+o.toString());
    }
}

产生输出:

class java.lang.String : hello
class java.lang.Long : 1
class java.lang.Long : 2
class java.lang.Double : 3.4

当然,格式并不像scanf那样紧凑,但它是开箱即用的Java。