所以我有 C 背景(最初是 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 没有像 C 或 C# 那样输出参数(或通过引用传递)。
但有更好的方法(而且更可靠)。使用正则表达式:
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 位数字组成。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)