Я пытаюсь получить 1 длинный (метку) и 3 выплывает полезной нагрузки сообщения, строки я передаю выглядит так (игнорировать кавычки):Java регулярное выражение разделенные запятой числа
"5737540811294,359.306580,7.948747,6.6707006621"
с помощью этого метода
private static void processAnglesMsg(String s) {
final Pattern dataTFFFsplit = Pattern.compile("[+-]([0-9]+),"
+ "[+-]([0-9]*[.])?[0-9]+,"
+ "[+-]([0-9]*[.])?[0-9]+,"
+ "[+-]([0-9]*[.])?[0-9]+,");
Matcher data = dataTFFFsplit.matcher(s.trim());
if(data.matches()) {
Long time = Long.parseLong(data.group(1));
float yaw = Float.parseFloat(data.group(2));
float pitch = Float.parseFloat(data.group(3));
float roll = Float.parseFloat(data.group(4));
System.out.format("Angles - [%8d] Yaw: %08.3f Pitch: %08.3f Roll: %08.3f%n",time,yaw, pitch,roll);
} else {
if(debugLevel>=4) System.out.println("DEBUG processAnglesMsg: "+s);
}
}
я храню достижения отладочный код с:
DEBUG processAnglesMsg: 5737540811294,359.306580,7.948747,6.6707006 621 *
поэтому он выглядит как шаблон, который у меня не работает, и data.matches() возвращает false, несмотря на большой поиск. Я не вижу, что я сделал неправильно. Я хочу, чтобы шаблон допускал дополнительный + или - хотя мои текущие данные не содержат этого.
Любопытно, почему бы просто не использовать s.trim.split (""), а затем сделать '' разобрать *? – randominstanceOfLivingThing
Знаете ли вы, что вы можете использовать '\ d' вместо' 0-9' - хотя вы, возможно, никогда не пострадали, он более надежен в странных локалях. – slim
@slim [docs] (https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html) утверждают, что '\ d' является предопределенным символьным классом для точно' [0-9] '. Локализация не должна быть релевантной. – Mena