2015-07-07 3 views
0

Это может звучать как нечетный запрос, но я хотел знать, есть ли простой способ в Java преобразовать «объявление строки Java» в фактическую строку.Java: преобразование «строкового выражения» в фактическую строку

Позвольте мне пояснить пример. Я хочу, чтобы прочитать что-то вроде этого:

"This is an example " + 
"of a complex\nString declaration " + 
"in Java" 

в строковом объект, который будет содержать:

"This is an example of a complex\nString declaration in Java" 

(ускользает, такие как \n должно быть протектором как фактические побеги, а не в качестве исходного текста).

ОБЪЯСНЕНИЕ ПОЧЕМУ: Поскольку я думаю, люди собираются спросить, позвольте мне объяснить обоснование этого. Я использую библиотеку разбора Java, которая может анализировать файл Java и из которого я могу извлечь значения, например, аннотации или константы. Тем не менее, парсер несколько ограничен и не будет распознавать сложные конкатенации и ускользать, как выше, так что в основном я получаю только весь первый пример как необработанную строку, и мне приходится анализировать и конкатенацию и избегать ее самостоятельно. Я просто задавался вопросом, есть ли какой-то встроенный способ (возможно, через отражение?), Чтобы сделать это.

EDIT: Я знаю, что я могу сделать «грубый» синтаксический разбор довольно легко (например: разделить на знаки «+», а затем обрезать, слить, стереть кавычки и т. Д., Но я не знаю всех изменения, которые могут быть (как многие операторы поддерживают ли строки? Just конкатенации или есть другие ?? И сколько побег макросы есть?)

+1

Взгляните на http://stackoverflow.com/questions/3537706/howto-unescape-a-java-string-literal-in-java – Codebender

+0

@Codebender: решения там, похоже, не анализируют конкатенацию, просто escape команд. Но это начало, спасибо –

ответ

1

Я думаю, вы могли бы решить вашу проблему с помощью QDox

It анализирует исходные файлы в модели JavaClass, JavaField и JavaMethod и т. д., каждый из них имеет аксессор, чтобы получить исходный код в виде строки.

+0

Прежде всего, спасибо за то, что я знаю о существовании этого парсера Java, кажется более продвинутым, чем тот, который я использую. Это, как было сказано, имеет ту же проблему: да, я могу получить доступ к «необработанной строке» с ней, но из быстрого взгляда, который я ему дал, она, похоже, не преобразует ее в фактическую конкатенированную и экранированную строку, если только вы вручную анализируете все двоичные выражения (но если я должен это сделать, я мог бы написать парсер для исходной строки, это быстрее) –

Смежные вопросы