用已知模式从字符串中解析值时,sscanf在Java上等同于什么?

问题描述 投票:29回答:8

因此,我来​​自C语言背景(最初是本人,尽管我已经有近5年没有使用该语言了,但我正在尝试从Java字符串中解析一些值。在C语言中,我将使用sscanf。在Java中,人们告诉我“使用Scanner或StringTokenizer”,但我看不到如何使用它们来实现我的目的。

我的输入字符串看起来像“ 17-MAR-11 15.52.25.000000000”。在C中,我会做类似的事情:

sscanf(thestring, "%d-%s-%d %d.%d.%d.%d", day, month, year, hour, min, sec, fracpart);

但是在Java中,我所能做的就是:

scanner.nextInt();

这不允许我检查模式,对于“ MAR”,我最终不得不做类似的事情:

str.substring(3,6);

糟透了!当然有更好的方法吗?

java scanf
8个回答
39
投票
但是有更好的方法(更可靠)。使用正则表达式:

Pattern p = Pattern.compile("(\\d+)-(\\p{Alpha}+)-(\\d+) (\\d+)\\.(\\d+)\\.(\\d+)\\.(\\d+)") Matcher m = p.matcher("17-MAR-11 15.52.25.000000000"); day = m.group(1); month= m.group(2); ....

当然,C代码更简洁,但是这种技术有一个好处:模式指定的格式比'%s'和'%d'更精确。因此,您可以使用\ d {2}指定该日期必须由2位数字组成。


22
投票

11
投票

3
投票

2
投票

0
投票

0
投票

-3
投票
© www.soinside.com 2019 - 2024. All rights reserved.