У меня есть страница, на которой выводится лог, но сделана она, разделением экрана на две части(не всплывающее окно)
Там есть нужные мне данные внутри тега
<MessageText>9088</MessageText>\n
К сожалению, части логов не выделяются в отдельные блоки, а идут сплошным текстом
Я использовал getPageSource() но не знаю как убрать из текста все ненужное
У меня получилось как-то так
String str = driver.getPageSource();
System.out.println(str.substring(45975,45990));
Судя по индексу, можно понять, что текст очень большой, но проблема в том, что лог получается каждый раз разный по длине тк туда пишутся имена клиентов и сотрудников, которые соответственно разные по длине. И если под одной заявкой у меня получилось получить нужные мне цифры внутри MessageText, то для других этот способ не работает.
И вот хотелось бы узнать, как обрезать текст от слова до слова. Обрезать все начало до <MessageText>
и после </MessageText>\n
, а желательно вообще включительно теги
BabyRoot
(Vasily)
23.Декабрь.2019 15:56:39
#2
String start = "<MessageText>";
String end = start.replace("<", "</");
str = str.substring(str.indexOf(start) + start.length(),
str.indexOf(end, str.indexOf(start) + start.length()));
1 лайк
java.lang.StringIndexOutOfBoundsException: begin 12, end -1, length 113601
BabyRoot
(Vasily)
24.Декабрь.2019 09:58:01
#4
String start = "<MessageText>";
String end = start.replace("<", "</");
BabyRoot
(Vasily)
24.Декабрь.2019 11:50:12
#6
Ну, руки я вам вряд-ли помогу выпрямить…
1 лайк
String str = driver.getPageSource();
String start = "<MessageText>";
String end = start.replace("<", "</");
str = str.substring(str.indexOf(start) + start.length(),
str.indexOf(end, str.indexOf(start) + start.length()));
// System.out.print(str);
java.lang.StringIndexOutOfBoundsException: begin 18, end -1, length 748005
BabyRoot
(Vasily)
24.Декабрь.2019 12:23:46
#8
Ну давайте уж и весь str
.
Он падает на str = str.substring(str.indexOf(start) + start.length(), str.indexOf(end, str.indexOf(start) + start.length()))
madvlaydin
(Vladislav Abramov)
24.Декабрь.2019 14:36:27
#12
почему я должен вас учить пользоваться средой разработки? погуглите, посмотрите курсы и статьи в интернете
я не верю, что у вас даже разработчика нету, который сможет подсказать как делать супер банальные вещи
Дело в том что функция о которой писал [BabyRoot] - не работает в моем случае.
Допустим:
String str = "123456789";
String start = "1";
String end = start.replace("1","9");
str = str.substring(str.indexOf(start) + start.length(),
str.indexOf(end, str.indexOf(start) + start.length()));
System.out.print(str);
ответ будет 2345678
. Мне это и нужно. Я и до того как создать пост, пробовал этот вариант. Но он не работает конкретно в моей ситуации с использованием driver.getPageSource();
Если бы я хотел просто узнать как в ява вытащить текст между двумя словами, я бы так и написал, не описывая всю ситуацию целиком
madvlaydin
(Vladislav Abramov)
24.Декабрь.2019 14:53:23
#14
а вы думаете, что тут вам сразу готовую функцию дадут?
Не претендую) Мне скинули вариант, я сказал что он не подходит. Если кто-то предложит еще решения, буду очень рад
BabyRoot
(Vasily)
24.Декабрь.2019 15:10:40
#16
А если больше никто не предложит?
Noksa
(Alexandr D.)
24.Декабрь.2019 16:30:20
#17
Если быстродействие неважно, то можно использовать простейшее регулярное выражение:
<MessageText>(.*)<\/MessageText>
И вытаскивать все матчи, а в них уже группу.
Искать соответственно все вхождения и в многострочном режиме.
1 лайк
BabyRoot
(Vasily)
24.Декабрь.2019 17:30:50
#18
Воу-воу-воу, полехше!
ну и уж тогда надо писать как регулярки использовать ))
Спасибо!
String resultStr = str.substring(str.indexOf("lt;MessageText>") + 1, str.indexOf("</MessageText>"));
Работает