java - android中的字符串解析

标签 java android string

在我的项目中,我必须解析一组包含数字、日期和其他信息的动态字符串。我尝试用正则表达式编写一个解析器。它的工作,但不是所有的时间。有人可以为此提出更好的解决方案吗?下面是一个示例字符串

"Thank you for using your HDFC Bank Debit/ATM Card ending 4444 for Rs. 125.25 towards ATM WDL in T NAGAR CAP at ATM on 2012-04-16:17:33:03."

这里我想要像这样的数据

bank name =hdfc
card no =4444
amount = 125.25
category = atm 
date = 2012-04-16:17:33:03

最佳答案

仅使用正则表达式解决此问题,尤其是当 String 的确切内容是动态的时,效果不是很好。您需要的是分词器和带有语法的词法分析器。我没有在 Java 中做过这样的事情,但首先你需要将你的字符串分解成标记(关键字、值、表达式、短语等) 喜欢

“感谢您于 2012-04-16:17:33:03 在 ATM 的 T NAGAR CAP 中使用尾号为 4444 的 HDFC 银行借记卡/ATM 卡支付 125.25 卢比的 ATM WDL。”

phrase[Thank you for using your] 
stringconst[HDFC Bank]
phrase[ending]
numericconst[4444]
keyword[for]
stringconst[Rs.]
numericconst[125.25]
....

您可以通过定义标记、为它们提供方便的名称并为它们定义规则(即使用正则表达式)来做到这一点。重点是你拥有什么,而不是它意味着什么 之后你需要一个 gramer,因为正则表达式不会帮助你理解“什么”:

sentence  ::= intro bankinfo cardinfo valueinfo categoryinfo timeinfo
intro     ::= phrase
bankinfo  ::= bankname phrase | phrase bankname
bankname  ::= stringconst
....

这基本上为您提供了一棵规则树。

通过标记化输入字符串并应用语法,您应该能够分析字符串并找到感兴趣的部分。

不幸的是,这只是对这个安静复杂但非常有趣的主题的理论介绍,我无法提供任何代码示例,但我希望这有助于入门。

关于java - android中的字符串解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11754415/

相关文章:

javax.validation 2.0.1 List<Object> 在 spring boot 中不起作用

java - 如何通过 spring 集成使用 tls 身份验证通过 ftp 下载文件

java - 如何从过滤器中查看消息?

java - 如何从扫描仪读取字符串,并将每个字母转换为不同的值?

java - 什么是编译器隐式方法?

android - 非法参数异常 : column '_id' does not exist when call to SimpleCursorAdaptor

android - 隐藏键盘返回空指针

java - 安卓 : create customer in magento via SOAP API

c - 使用 sprintf() 连接格式化字符串是否安全?

每次运行时 Java 字符串到字节数组的变化