Извлечение текста из строки Java - PullRequest
1 голос
/ 16 февраля 2011

Я использую стороннюю библиотеку, которая возвращает информацию об исключении в виде строки (не объект исключения).Я хочу извлечь некоторые части трассировки стека строк, чтобы показать пользователю в графическом интерфейсе.

Два примера:

com.sdf.configure.model.change.InvalidChangeException: transformed change validation failed
    at com.sdf.configure.model.change.SimpleConfigChanger.performChange(SimpleConfigChanger.java:129)
    at com.sdf.portal.service.QosPolicyServiceImpl.applyPolicySnapshot(QosPolicyServiceImpl.java:99)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.referentia.commons.distributed.remoting.jms.JmsServiceExporter$1$1.run(JmsServiceExporter.java:189)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:619)
Caused by: com.sdf.configure.model.change.InvalidChangeException: can't add input service policy: policy has queueing
    at com.sdf.configure.model.validate.RuleBasedValidator$RuleBasedChangeValidator.checkValidChange(RuleBasedValidator.java:5188)
    at com.sdf.configure.model.validate.AbstractContextChangeValidator.checkValidChange(AbstractContextChangeValidator.java:304)
    at com.sdf.configure.model.validate.AbstractContextChangeValidator.checkValidChange(AbstractContextChangeValidator.java:140)
    at com.sdf.configure.model.validate.RuleBasedValidator.checkValidChange(RuleBasedValidator.java:1039)
    at com.sdf.configure.model.change.SimpleConfigChanger.performChange(SimpleConfigChanger.java:126)
    ... 12 more

Я хочу извлечь текст: не могудобавить политику обслуживания ввода: политика имеет очередь

com.sdf.configure.model.change.InvalidChangeException: transformed change validation failed
    at com.sdf.configure.model.change.SimpleConfigChanger.performChange(SimpleConfigChanger.java:129)
    at com.sdf.portal.service.QosPolicyServiceImpl.applyPolicySnapshot(QosPolicyServiceImpl.java:99)
    at sun.reflect.GeneratedMethodAccessor139.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.sdf.commons.distributed.remoting.jms.JmsServiceExporter$1$1.run(JmsServiceExporter.java:189)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:619)
Caused by: com.sdf.configure.model.change.InvalidChangeException: compound change component validation failed
    at com.sdf.configure.model.validate.AbstractContextChangeValidator.checkValidChange(AbstractContextChangeValidator.java:1309)
    at com.sdf.configure.model.validate.AbstractContextChangeValidator.checkValidChange(AbstractContextChangeValidator.java:361)
    at com.sdf.configure.model.validate.AbstractContextChangeValidator.checkValidChange(AbstractContextChangeValidator.java:140)
    at com.sdf.configure.model.validate.RuleBasedValidator.checkValidChange(RuleBasedValidator.java:1039)
    at com.sdf.configure.model.change.SimpleConfigChanger.performChange(SimpleConfigChanger.java:126)
    ... 11 more
Caused by: com.sdf.configure.model.change.InvalidChangeException: can't add input service policy: policy has shaping
    at com.sdf.configure.model.validate.RuleBasedValidator$RuleBasedChangeValidator.checkValidChange(RuleBasedValidator.java:5180)
    at com.sdf.configure.model.validate.AbstractContextChangeValidator.checkValidChange(AbstractContextChangeValidator.java:304)
    at com.sdf.configure.model.validate.AbstractContextChangeValidator.checkValidChange(AbstractContextChangeValidator.java:1306)
    ... 15 more

Я хочу извлечь текст:

ошибка проверки составного изменения компонента

невозможно добавить политику обслуживания ввода: политика имеет форму

Есть какой-нибудь элегантный способ сделать это?Единственный способ найти части, которые я хочу извлечь, заключается в том, что перед фрагментами, которые я хочу извлечь, всегда стоит:

.

Ответы [ 3 ]

2 голосов
/ 16 февраля 2011

Это регулярное выражение будет обрабатывать это ...

Оригинальное регулярное выражение: ^Caused\sby:\s\S+:(.+)$

как строка Java: "^Caused\\sby:\\s\\S+:(.+)$"

Вы можете легко проверить это с помощью этого онлайн-инструмента .

Вам нужно будет включить опцию MULTILINE

Пример кода:

String regex = "^Caused\\sby:\\s\\S+:(.+)$";
Pattern p = Pattern.compile(regex, Pattern.MULTILINE);

Matcher m = p.matcher(exceptionString);
while (m.find()) {
    String outputThis = m.group(1);
}
1 голос
/ 16 февраля 2011

Использование:

StringUtils.substringsBetween(searchMe, start, end);

Как это:

String[] causes = StringUtils.substringsBetween(exceptionMessage, 
                        "Caused by: com.sdf.configure.model.change.InvalidChangeException:", 
                        "at com.sdf");

Это даст вам массив текста, разделенный 2-м и 3-м параметрами.

Вот JavaDoc

1 голос
/ 16 февраля 2011

Используйте string.indexOf, чтобы получить местоположение недопустимого исключения изменения, затем используйте stirng.index из "at com." чтобы получить индекс следующей части трассировки стека, выберите все между двумя индексами, скорректированными на длину строки текста исключения как смещение

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