gpt4 book ai didi

java - 使用已知模式从字符串中解析值的 sscanf 的 Java 等效项是什么?

转载 作者:IT老高 更新时间:2023-10-28 21:07:16 26 4
gpt4 key购买 nike

所以我来自 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 位数字组成。

关于java - 使用已知模式从字符串中解析值的 sscanf 的 Java 等效项是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8430022/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com