当前位置: 首页 > 面试题库 >

使用已知模式从字符串中解析值时,sscanf的Java等效语言是什么?

羊柏
2023-03-14
问题内容

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

我的输入字符串看起来像“ 17-MAR-11 15.52.25.000000000”。在CI中将执行以下操作:

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中执行以下操作的最佳方法是什么。我有两个输入字符串 我需要从字符串中提取类型和数字。 在这种情况下,答案是type =“ a good”和number =“ 234” 谢谢 问题答案: 您可以使用正则表达式:

  • 问题内容: 我从网络上获取了日期字符串,然后我想将其切成对象。但是应用程序以某种方式崩溃。这是我正在解析的字符串: onStartCommand() stringToDate() LogCat: 编辑: onDestroy()为定期更新设置警报… 问题答案: 从中删除“ XXX” 一切都会正常。 浏览可在构造函数内使用的符号列表。尽管文档显示的是“ XXX”格式,但这在Android上不起作用,并

  • 我很难使用正则表达式。我已经用 regex101.com 做了很多测试,但无法解决这个问题。 我有这个字符串: 我希望能够替换版本号,版本号总是由4个数字组成,用点分隔,但每个数字可能超过1位。 我更喜欢在(最好)1行中解决这个问题,因为我需要在吞咽任务中插入这个问题。 我试过这个: 但它只有在每个数字只有1位的情况下才有效,这不是我的情况。 我如何让它工作,以便它搜索多次的数字?

  • 问题内容: Go语言是否像Java一样对字符串使用写时复制?也就是说,如果我按值将字符串传递给方法并且从未更改,则它将分配内存并复制字符串(这将节省时间),或者仅引用单个副本。 问题答案: 它不是写时复制的,因为字符串是不可变的。但是共享一个字符串也不会复制基础内存区域。在Go中,字符串表示为(长度,数据)对。如果传递字符串,Go将复制长度和指针,但不复制所指向的数据。 有关更多信息,请参阅gol

  • 错误:java。lang.NumberFormatException 文件错误:activity_main_user.xml 相关元素:一个EditText(PlayerMoneyToUpdate)字段和TextView(PlayerMoneyValue) 项目结构: 有两项活动: 主要活动。java是应用程序的主要UI,包含一个显示所有用户(即游戏玩家)的布局 MainUserActivity.

  • base64编码字符串:yobic4fy base64解码字符串(来自ASP页面):`àhsx(正确) Base64解码字符串(来自JSP页面和Eclipse):^àhs?x(不正确) Java/JSP代码: 重申一下,正确的值应该是。我不明白问题出在哪里。如有任何帮助,我们将不胜感激。 在ASP内部,明文值是从密码中正确实现的: 明文:foobar 密文:??hsx 解码的base64字符串:?