1

我需要一个与vsscanf()Java 中的 C 等价的东西。更详细,我在这里有这个:

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

请注意,我确实已经阅读了 sscanf() 的等价物,因此可以从那里轻松完成。但我问自己是否有比用 for 循环填充 args 更优雅的解决方案。

此外,如果解决方案也允许使用可变参数而不是数组,那就太好了。见下文。

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

1 回答 1

3

您可以使用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。

于 2013-01-04T00:55:01.033 回答