Warum wird nur die erste Zeile im while Block ausgeführt?

Zwanglos

Mitglied
Bin Anfänger aber mit python3 wird die ganze while Schleife ausgeführt,
Das Ergebnis mit Java sieht leider so aus:

{"dataId":"AAW9AfyzO9CyYfJ7vRX9B4AAB"

"devId":"732500878caab5f91c8b"

"productKey":"p9tcjpycdgh8zsvx"

"status":[{"1":"home"

"code":"master_mode"

"t":1615728793812

GrpOne: 1615728793812

[CODE lang="java" title="while?" highlight="System.out.println("GrpOne: "+m.group(1));"]package com.tuya.open.sdk.example;
import com.alibaba.fastjson.JSON;
import com.tuya.open.sdk.mq.AESBase64Utils;
import com.tuya.open.sdk.mq.MqConfigs;
import com.tuya.open.sdk.mq.MqConsumer;
import java.util.Arrays;
import java.sql.Timestamp;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ConsumerExample {
public static void main(String[] args) throws Exception {
String url = MqConfigs.EU_SERVER_URL;
url = "pulsar+ssl://mqe.tuyaeu.com:7285/";
String accessId = "5ts9iy";
String accessKey = "44a9975";
MqConsumer mqConsumer = MqConsumer.build().serviceUrl(url).accessId(accessId).accessKey(accessKey)
.maxRedeliverCount(3).messageListener(message -> {
System.out.println("---------------------------------------------------");
System.out.println("Message received:" + new String(message.getData()) + ",seq="
+ message.getSequenceId() + ",time=" + message.getPublishTime() + ",consumed time="
+ System.currentTimeMillis());
String jsonMessage = new String(message.getData());
MessageVO vo = JSON.parseObject(jsonMessage, MessageVO.class);
System.out.println("the real message data:" );
String rmessage = AESBase64Utils.decrypt(vo.getData(), accessKey.substring(8, 24));
String[] arrData = rmessage.split(",", -1);
int millis=0;
Pattern p = Pattern.compile(".t.*🙁\\d+)");
for(int i = 0; i< arrData.length; i++){
System.out.println(arrData+"\n");
Matcher m = p.matcher(arrData);
while (m.find()) {
System.out.println("GrpOne: "+m.group(1));
millis = Integer.parseInt(m.group(1));
Date date2 = new Date(millis*10000);
System.out.println("Date2:"+date2);
}

}
}
);
mqConsumer.start();
}
}[/CODE]
 
Ich kenne mich mit python nicht aus aber ich weiß, dass man reguläre ausdrücke von PHP nicht 1:1 nach Java übernehmen kann. Da gibt es irgendwelche Unterschiede die mich schon oft genervt haben. Vielleicht hast du das Gleiche Problem?
 
Ich kenne mich mit python nicht aus aber ich weiß, dass man reguläre ausdrücke von PHP nicht 1:1 nach Java übernehmen kann. Da gibt es irgendwelche Unterschiede die mich schon oft genervt haben. Vielleicht hast du das Gleiche Problem?
Nein, der Timestamp wird mit der regex perfekt erkannt, das merkt man daran, dass der richtige erkannte String in der ersten Zeile im while Block ausgegeben wird, aber danach geht es leider nicht im while Block weiter. Eine Fehlermeldung kommt aber auch nicht.
 
Nein, der Timestamp wird mit der regex perfekt erkannt, das merkt man daran, dass der richtige erkannte String in der ersten Zeile im while Block ausgegeben wird, aber danach geht es leider nicht im while Block weiter. Eine Fehlermeldung kommt aber auch nicht.
Hast du auf doof mal probiert das initialisieren des pattern in die for Schleife zu nehmen?
 
Hast du auf doof mal probiert das initialisieren des pattern in die for Schleife zu nehmen?
Wie schon gesagt, der Ausdruck matched perfekt! Das Problem ist, dass ab der Zeile :
millis = Integer.parseInt(m.group(1));
aus Gründen die mir nicht klar sind nicht, nicht weiter ausgeführt wird, aber eben auch keine Fehlermeldung kommt. Einfach so, als gäbe es nur die erste Zeile im while Block,
 
Wie schon gesagt, der Ausdruck matched perfekt! Das Problem ist, dass ab der Zeile :
millis = Integer.parseInt(m.group(1));
aus Gründen die mir nicht klar sind nicht, nicht weiter ausgeführt wird, aber eben auch keine Fehlermeldung kommt. Einfach so, als gäbe es nur die erste Zeile im while Block,
Naja date() ist schon ne Weile deprecated. Ka mit welcher Java version du arbeitest aber vielleicht liegt es daran
 
Es fliegt eine NumberFormatException, weil 1615728793812 kein gültiger Integer ist.

Kann man sicherlich irgendwie konfigurieren, damit die Exception geloggt wird, ich kenn die Lib allerdings nicht.


Json mit Split und Regex verarbeiten ist btw nicht sehr empfehlenswert, da dabei auch die Formatierung relevant ist, die sich durchaus mal ändern kann.

Naja date() ist schon ne Weile deprecated. Ka mit welcher Java version du arbeitest aber vielleicht liegt es daran
Date selbst und und Date(long) sind nicht deprecated.
 
Es fliegt eine NumberFormatException, weil 1615728793812 kein gültiger Integer ist.

Kann man sicherlich irgendwie konfigurieren, damit die Exception geloggt wird, ich kenn die Lib allerdings nicht.


Json mit Split und Regex verarbeiten ist btw nicht sehr empfehlenswert, da dabei auch die Formatierung relevant ist, die sich durchaus mal ändern kann.


Date selbst und und Date(long) sind nicht deprecated.
Danke!!! Das ist die Lösung, aber für mich irgendwie ungewöhnlich und unerwartet, dass da keine Exception kommt.
 

Zurück
Oben