Ошибка синтаксического анализа Java - PullRequest
3 голосов
/ 30 апреля 2010

Я пытался разобрать строку:

Портфолио1 [{Обмен: NASDAQ-Symbol: INFY-Full Name: Infosys Technologies Limited (ADR) -Поделиться: 100.0 -Процентная прибыль: 388.2258065-Стоимость позиции: 1240.0 USD -Эта позиция сделана сегодня: -46.9997 USD -Эта позиция имеет общий прирост: 4814,0 долларов США-Эта позиция стоит: 6054,0 долларов США} - {Обмен: NASDAQ-Символ: GOOG-Полное имя: Google Inc.-Количество акций: 10,0-Прибыль: 17,98444444-Позиция Стоимость: 4500.0 USD-Эта позиция сделана сегодня: -10.70007 USD-Эта позиция в общем выигрыше: 809.3 USD-Эта позиция стоит: 5309.3 USD} - {Обмен: NASDAQ-Символ: QCOM-Full Name: QUALCOMM, Количество акций Inc.: 0,0-процентное усиление: 0,0} -] Портфолио2 [{Exchange: NASDAQ-Symbol: GOOG-Full Name: Google Inc.-Количество акций: 1000,0-Процентное усиление: 32.56679151-Стоимость позиции: 400500.0 USD-Эта позиция сделана сегодня: -1070.007 USD-Эта позиция имеет общий прирост: 130430.0 USD-Эта позиция стоит: 530930.0 USD} - {Обмен: NASDAQ-Символ: MSFT-Full Name: Microsoft Corporation-Share Count: 10.0-процентный прирост: -4.03125-стоимость позиции is: 320.0 USD-Эта позиция сделана сегодня: -2.93001 USD-Эта позиция имеет общий прирост: -12.9 USD-Эта позиция стоит: 307.1 USD} - {Обмен: NYSE-Символ: IBM-Full Name: International Business Machines Corp.-Share Count: 10,0-процентное увеличение: 397.80769230000004-Стоимость позиции: 260.0 USD-Эта позиция сделана сегодня: -10.30014 USD-Эта позиция в общем выигрыше: 1034.3 USD-Эта позиция стоит: 1294.3 USD} - {Обмен: NASDAQ-Символ: NVDA-Полное имя: NVIDIA Corporation-Share Count: 100,0-процентное увеличение: -10,79418345-Стоимость позиции: 1788,0 USD-Эта позиция сделана сегодня: -70,0 USD-Эта позиция имеет общую сумму Прирост: -193.0 USD-Эта позиция стоит: 1595.0 USD} -] ";

с разделителем в виде [

и мой код был

String delims = "[";
String[] tokens = s.split(delims);

for (int i = 0; i < tokens.length; i++)
    System.out.println(tokens[i]);

но это дает мне ошибку

java.util.regex.PatternSyntaxException: Unclosed character class near index 0 [

Ответы [ 2 ]

8 голосов
/ 30 апреля 2010

символ [имеет специальные значения в регулярных выражениях. Вам нужно сделать

String delims = "\\["; String[] tokens = s.split(delims);
1 голос
/ 30 апреля 2010

Как уже сказал Роб Ди Марко, при использовании метода, основанного на регулярных выражениях, вы должны избегать символов со специальным значением.

В качестве альтернативы вы можете использовать StringTokenizer, который не использует регулярные выражения для разделения, и, таким образом, вам не нужно ничего избегать. Это также обычно быстрее, но не может сравниться с мощью и гибкостью регулярного выражения split.

StringTokenizer tok=new StringTokenizer(s, "[");
List<String> tokens=new ArrayList<String>();
while (tok.hasMoreTokens()){
   tokens.add(tok.nextToken());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...