java - 在android中使用Pattern从标准文本中获取一些字符串

标签 java android

我正在开发一个 Android 应用程序,它有一个基于 SMS 传入消息的广播接收器。

我想跟踪来自特定发件人号码的每条消息,并对该短信执行一些操作,例如,从每条消息中检索一些数据。

我要分析的消息体是这样的:

"Usted ha recibido 5.0 CUC del numero 55391393.Saldo principal 1565.0 CUC, linea activa hasta 2019-02-10, vence 2019-03-12"

我想用Pattern类提取,值以粗体标记。但我对正则表达式真的很陌生。有帮助吗?

这是我的实际代码:

public class SMSReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        final Bundle bundle = intent.getExtras();

        try {

            if (bundle != null) {

                final Object[] pdusObj = (Object[]) bundle.get("pdus");

                assert pdusObj != null;
                for (Object aPdusObj : pdusObj) {

                    SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) aPdusObj);
                    String senderNum = currentMessage.getDisplayOriginatingAddress();
                    String message = currentMessage.getDisplayMessageBody();

                    /*
                    String body = currentMessage.getMessageBody().toString();
                    String address = currentMessage.getOriginatingAddress();
                    */

                    Log.i("SmsReceiver", "senderNum: " + senderNum + "; message: " + message);

                    //Save to DB
                    if (senderNum.equals("Cubacel")) {

                        Toast.makeText(context, "senderNum: " + senderNum + ", message: " + message, Toast.LENGTH_LONG).show();

                        //Parse this SMS with Regular Expresions


                    } else {
                        //Search for transferred numbers pending
                    }

                } // end for loop

            } // bundle is null

        } catch (Exception e) {
            Log.e("SmsReceiver", "Exception smsReceiver" + e);
        }
    }
}

这是一个使用 JS 的示例工作代码,但我不知道如何在 Java 中实现 https://regexr.com/3mgq2

最佳答案

    String re1=".*?";   // Non-greedy match on filler
    String re2="(5\\.0)";   // Float 1
    String re3=".*?";   // Non-greedy match on filler
    String re4="(55391393)";    // Number 1
    String re5=".*?";   // Non-greedy match on filler
    String re6="(1565\\.0)";    // Float 2

    Pattern p = Pattern.compile(re1+re2+re3+re4+re5+re6,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);

试试这个:)

关于java - 在android中使用Pattern从标准文本中获取一些字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49374056/

相关文章:

java - 检测 android Activity 启动

java - 外部文件 Java

java - 如何更改照片?

Android 相机(照片未显示)

java - 游戏的暂停/恢复功能

java - 弹出窗口中的Android GridLayout不显示数据

java - 缺少 While 循环逻辑

java - 没有参数的方法泛型

java - java.lang.Math 使用了哪些算法?

java - 计算行进距离-Android