有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

解析相当于Java中C的vsscanf()

我需要一个等价于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) 个答案

  1. # 1 楼答案

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