gpt4 book ai didi

java - 解析短信的最佳方式是什么

转载 作者:行者123 更新时间:2023-11-29 07:49:39 25 4
gpt4 key购买 nike

我正在开发一个应用程序,用于将短信解析为我想存储在 sqlite 数据库中的字符串。

这是短信外观的示例。话费支付示例。

Airtime payment made for UGX5,000 to KKL(0909xxxx).
Your Balance is UGX10,000.
Thank you for using KKL MobileMoney.

手机存款示例

You have received UGX100,000 from 09006700. Reason:J.
Your balance is UGX170,000.

手机汇款示例

You have sent UGX10,000 to 08970000.
Reason:j.
Your balance is UGX120,000.
Thank you for using KKL MobileMoney.

我感兴趣的是: -发送/接收/支付的金额。- 从/发送到/付款到的号码。- 原因-余额。

到目前为止,我已经尝试使用拆分功能。

虽然它不一致。我正在使用字符串标记的数组索引,但在某些字符串上我得到一个索引超出绑定(bind)的异常,但在某些字符串上它有效。

这是我目前的代码......但工作不一致!

if (str.startsWith(RECEIVED))
{
// for mm deposit
Log.e("msg", str);
String delimeter="[ .]+";
String[] tokens= str.split(delimeter);
for (int i=0;i < tokens.length;i++)
{
Log.e("Test",tokens[i]);
}
String amount =tokens[3];
String reason =tokens[6].trim();
String number=tokens[5];
String balance=tokens[11];
Log.e("Amount",amount);
Log.e("reasons",reason);
Log.e("number",number);
Log.e("balance",balance);
String type="Deposit";
db.addrecord(amount, type, reason, number, balance);
db.close();
}
else if(str.startsWith(SEND))
{
// for sent sms
Log.e("msg", str);
String delimeter="[ .]+";
String[] tokens= str.split(delimeter);
for (int i=0;i < tokens.length;i++)
{
Log.e("Test",tokens[i]);
}
String amount =tokens[3];
String reason =tokens[6].trim();
String number=tokens[5];
String balance=tokens[11];
Log.e("Amount",amount);
Log.e("reasons",reason);
Log.e("number",number);
Log.e("balance",balance);
String type="Payment";
db.addrecord(amount, type, reason, number, balance);
db.close();
}

else if(str.startsWith(AIRTIMEPAYMENT))
{ // for airtime sms
Log.e("msg", str);
String delimeter="[ .]+";
String[] tokens= str.split(delimeter);
for (int i=0;i < tokens.length;i++)
{
Log.e("Test",tokens[i]);
}
String amount =tokens[4];
String reason =tokens[0]+ " "+ tokens[1];
String number=tokens[7];
String balance=tokens[11];
Log.e("Amount",amount);
Log.e("reasons",reason);
Log.e("number",number);
Log.e("balance",balance);
String type="Air Time ";
db.addrecord(amount, type, reason, number, balance);
db.close();
}

关于如何最好地处理解析的任何提示/建议?

我是初学者java/android程序员!

罗纳德

这是我对

所做的编辑
private Map<String, String> parseSms(String s){
Map<String, String> ret = new HashMap<String, String>();
s = s.replace("\n", "");
StringTokenizer t = new StringTokenizer(s, ".");
while (t.hasMoreTokens()){
String b = t.nextToken().trim();
if (b.startsWith("You have sent") ||(b.startsWith("You have received"))){
String type = getType(b);
String parsed = parseAmount(b);
String number = parseNumber(b);
ret.put("amount", parsed);
ret.put("number", number);
ret.put("type", type);
}else if(b.startsWith("Your")){//balance
String parsed = parseAmount(b);
ret.put("balance", parsed);
}else if (b.startsWith("Reason")){

ret.put("reason", b.toString());
}
else if( b.startsWith("Airtime"))
{
String type = getType(b);
String parsed = parseAmount(b);
String number = parseNumber(b);
ret.put("amount", parsed);
ret.put("number", number);
ret.put("reason", "Air Time Payment");
ret.put("type", type);
}else if(b.startsWith("Your")){//balance
String parsed = parseAmount(b);
ret.put("balance", parsed);

}


}

return ret;
}

它解决了这个问题。

最佳答案

解析此类文本的最佳方法是使用正则表达式 (RegEx)。

所以..你在你的应用程序中定义了几个正则表达式......并检查字符串是否匹配......如果是......那么你找到了!

花一些时间学习正则表达式。它们在解析中用得非常多。您可以使用网站 http://rubular.com/用于验证/测试您的正则表达式。

使用正则表达式解析/匹配字符串的代码示例:

Pattern p = Pattern.compile("^(\\d+)\\s(\\d+)\\s(.*)$");
Matcher m = p.matcher(strAlarm);
if (m.matches(){
int notificationId = Integer.parseInt(m.group(1));
long timeInMsec = Long.parseLong(m.group(2));
String message = m.group(3);
....
}

上面的例子解析了这种字符串“323 432 123 zxchzxc anything kjhzcx”

作为一个小帮助.. 让我们解析你的第二个例子。

Pattern p=Pattern.compile("^You\\s+have\\s+received\\s+(\\S+)\\sfrom\\s+(\\d+)\\.\\sReason:\\w\\.\\s*Your\\sbalance\\sis\\s(\\S+)");
Matcher m = p.matcher(smsTextHere);
if (m.matches(){
//m.group(1) -- is string containing UGX100,000
//m.group(1) -- is string containing 09006700
//m.group(1) -- is string containing UGX170,000.
}

关于java - 解析短信的最佳方式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22294546/

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