我需要在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);
答案 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。