首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从java中的字符串中获取biginteger号

从java中的字符串中获取biginteger号
EN

Stack Overflow用户
提问于 2022-09-14 11:50:58
回答 1查看 61关注 0票数 0

我正在尝试使用AT+CMGL命令解析接收到的消息。

我的主要兴趣是从消息中获取15位数字,并将其存储在一个表中。

下面是我接收到的数据的一个例子:

代码语言:javascript
复制
+CMGL: 0,"REC READ","+212664090320",,"22/09/14,10:58:33+04"
876011033120958
+CMGL: 0,"REC READ","+212664486654",,"22/09/14,11:47:33+04"
Ver:03.27.07_00 GPS:AXN_5.1.9 Hw:FMB920 Mod:13 IMEI:350444465129844 Init:2022-9-6 12:0 Uptime:1193 MAC:380A2986D9CB SPC:1(0) AXL:0 OBD:0 BL:1.10 BT:4

fyi,我收到了8种不同的消息格式,我在这里列出了两条。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-14 12:58:30

  1. 数字存储机制用于Number,即您打算对其进行计算的事情。从IMEI中添加1或从另一个IMEI中减去一个IMEI是没有意义的。因此,我怀疑使用BigInteger作为IMEI的存储格式是特别明智的。String很好,

  1. 从这样的输入中提取IMEI,正则表达式似乎很有用。我想试试\bIMEI:(\d{15,16})\b。意思是:‘单词中断’,然后是IMEI:,然后是15或16位数字,然后是另一个单词中断。(IMEI目前为15或16位数字)。您可以通过使用\\d+ (意思是“1位或更多位数”)来验证未来的问题。括号还允许我们稍后得到这个数字。然后,做一个匹配器,查找(),并请求组(1):

代码语言:javascript
复制
private static final Pattern IMEI_FINDER = Pattern.compile("\\bIMEI:(\\d{15,16})\\b");

public String extractImei(String in) {
  Matcher m = IMEI_FINDER.matcher(in);
  if (m.find()) return m.group(1);
  throw new IllegalArgumentException("No IMEI found: " + in);
}

上面的内容将返回输入中的第一个IMEI。如果其中有多个IMEI:条目,并且需要所有条目,则可以重复调用IMEI:;如下所示:

代码语言:javascript
复制
while (m.find()) imeiList.add(m.group(1));
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73716382

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档