Как разделить объединенную строку на несколько значений с плавающей запятой? - PullRequest
0 голосов
/ 09 февраля 2009

я новичок в Java у меня

packet=090209153038020734.0090209153039020734.0 

вот так я хочу разбить эту строку и сохранить в массив, как две строки:

1) 090209153038020734.0
2) 090209153039020734.0

Я сделал так:

String packetArray[] = packets.split(packets,Constants.SF); 

Где: Constants.SF = 0x01.

Но это не сработает.

Пожалуйста, помогите мне.

Ответы [ 6 ]

3 голосов
/ 09 февраля 2009

Я бы дважды подумал об использовании split, поскольку это, очевидно, поля фиксированной ширины.

Я видел их раньше по другому вопросу (несколько на самом деле, поэтому я предполагаю, что это может быть домашняя работа (или популярное устройство сбора данных :-)), и ясно, что протокол:

  • STX (0x01).
  • 0x0F.
  • дата (ГГММДД или ДДММГГ).
  • время (ЧЧММСС).
  • 0x02.
  • значение (XXXXXX.X).
  • 0x03.
  • 0x04.

И, учитывая, что они имеют фиксированную ширину, вам, вероятно, следует просто использовать подстроки для вывода информации.

2 голосов
/ 09 февраля 2009
String packetArray[] = packets.split("\u0001");

должно работать. Вы используете

public String[] split(String regex, int limit)

, который делает что-то еще: он гарантирует, что split() возвращает массив, содержащий не более limit членов (в данном случае 1, так что вы получите то, о чем просите).

2 голосов
/ 09 февраля 2009

Здесь полезен JavaDoc of String: http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html

У вас есть пакет String;

String.indexOf(String) дает вам позицию специальной подстроки. вы заинтересованы в "." знак. Так ты пишешь

int position = packet.indexOf(".")+1

+ 1, потому что вы тоже хотите использовать конечный десятичный знак. Он вернет что-то 20-ти и будет последним положением первого числа.

Тогда мы используем подстроку

String first = packet.substring(0,position) даст вам все, вплоть до ".0" String second = packet.substring(position-1) должен дать вам все, начиная с ".0" и до конца строки.

Теперь, если вы хотите, чтобы они были явно в массиве, вы можете просто поместить их туда. Код в целом - у меня могут быть некоторые ошибки "off by one".

int position = packet.indexOf(".")+1 
String first = packet.substring(0,position)
String second = packet.substring(position-1)
String[] packetArray = new String[2];
packetArray[0] = first;
packetArray[1] = second;
1 голос
/ 09 февраля 2009

Вам нужно прочитать Javadocs для методов String.split () ... вы вызываете версию String.split (), которая принимает регулярное выражение и ограничение, но вы передаете саму строку в качестве первого параметра , что на самом деле не имеет смысла.

Как упоминал Аарон Дигулла, используйте другую версию.

0 голосов
/ 09 февраля 2009

split использует регулярные выражения , как описано здесь . Ваш код, кажется, пытается соответствовать целой строке Constants.SF = 0x01 раз, что не имеет особого смысла. Если вы знаете, что такое char, то вы можете использовать что-то вроде {[^ c] + cc}, где c - символ коробки (я думаю, это 0x01), чтобы соответствовать каждому «пакету».

Я думаю, вы пытаетесь использовать его как функцию .net String.Split (...)?

0 голосов
/ 09 февраля 2009

Вы не говорите, как вы хотите сделать раскол. Оно может быть основано на фиксированной длине (количестве символов) или вам нужно одно десятичное число.

Если в первом случае вы могли бы выполнить packetArray = new String [] {packet.substring (0, 20), packet.substring (21)};

int dotIndex = packets.indexOf('.');
packetArray = new String[]{packet.substring(0, dotIndex+2), packet.substring(dotIndex+2)};

Ваше решение путает регулярное выражение со строкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...