有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaMQTT主题匹配评估

我正在使用Mqtt(Paho)实现一个Android应用程序。我有一些组件,我必须将订阅的主题(包括通配符)与客户端发布到的acutal主题进行总体比较

我只是没有头脑,我的“基本”正则表达式技能也没有帮助

Paho/Java MQTT中是否有实用程序类来查看

“传感器/温度/+/度/#/ID”(订阅主题)

适用于

“先生/温度/花园/摄氏度/摄氏度/零上/身份证”(实际话题)

有人知道最好的方法是什么吗

谢谢!

编辑:你好,我想这应该是正确的

public static boolean compareTopic(final String actualTopic, final String subscribedTopic){

   return actualTopic.matches(subscribedTopic.replaceAll("\\+", "[^/]+").replaceAll("#", ".+"));
}

共 (3) 个答案

  1. # 1 楼答案

    你的解决方案应该有效,所以在你的例子中,正则表达式应该是

    "SENSOR/TEMPERATURE/[^/]+/DEGREE/.+/ID"
    

    http://www.regexplanet.com/advanced/java/index.html这样的网站对于此类案例来说是一个非常好的资源

  2. # 2 楼答案

    我已经进行了一些测试,我认为这是可行的:

    String topicExp = topicPattern//
            .replaceAll("\\$", "\\\\\\$")//
            .replaceAll("\\+", "[^/]+")//
            .replaceAll("/\\#$", "(\\$|/.+)");
    
    Pattern pattern = Pattern.compile(topicExp);
    boolean match = pattern.matcher(topic).matches();
    return match;
    
  3. # 3 楼答案

    下面是一个示例,说明如何将MQTT主题与util_主题中的mosquitto_topic_matches_sub()函数中的订阅相匹配。c:

    https://github.com/eclipse/mosquitto/blob/master/lib/util_topic.c

    这看起来很简单,但是有一些问题需要解决,所以你的简单正则表达式并不能很好地完成这项工作