Разбор строки разной длины - PullRequest
2 голосов
/ 29 декабря 2010

Мне нужно проанализировать сообщение SWIFT, которое выглядит следующим образом:: 15A:: 20: ССЫЛКА: 21: НОВОЕ: 15B:: 30T:

Мне нужно проанализировать его по символам: ...:Проблема в том, что между: может быть 3 и 2 символа.Это возможно?

Ответы [ 6 ]

6 голосов
/ 29 декабря 2010

Не изобретайте колесо и используйте библиотеку SWIFT WIFE для Java.

1 голос
/ 29 декабря 2010

Пока вы анализируете строку, изучите каждый символ, чтобы увидеть, является ли он разделителем.Также попробуйте String.split();

1 голос
/ 29 декабря 2010
String string = "15A: :20:REFERENCE :21:NEW :15B: :30T".split("\\:");
0 голосов
/ 01 января 2011

Итак, я нашел выход:

String s = ":15A: :20:REFERENCE :21:NEW :15B: :30T:";
String[] parsedString = s.split("[\b:]");
0 голосов
/ 29 декабря 2010

Я понятия не имею, что такое "SWIFT", но только из вашего описания потока данных выше:

Как уже говорили другие, разделите двоеточие.Затем в результирующем массиве вам нужно будет отделить пары, т.е. вы получите первый код в [0] с текстом в [1], следующий код в [2] с текстом в [3] и т. Д.. Должно быть просто зациклить массив и сопоставить их.

Два потенциальных перехвата:

  1. Возможно ли иметь двоеточие в потоке данных, которыйне действует как разделитель?Например, есть ли способ избежать двоеточия, чтобы его можно было рассматривать как текст?Если это так, в зависимости от того, как работают правила escape, вам может понадобиться более сложное выражение в разбиении, или оно может быть непрактичным, и вам придется циклически проходить текст за символом.

  2. Можете ли вы доверчиво заявить, что не будет ошибок во входном потоке?Например, могут ли отсутствовать двоеточия или коды без сопроводительных данных или чего-то еще?Если это так, то снова разделение может быть слишком упрощенным.

В худшем случае всегда нужно просто вернуться к циклу по строке с charAt, проверить каждый символ на двоеточие и разбить егодо этого пути.

0 голосов
/ 29 декабря 2010

Вы можете использовать метод split , чтобы получить значения между ':'

...