t.me/atinfo_chat Telegram группа по автоматизации тестирования

Как обрезать текст от слова до слова Java

java
webdriver
Теги: #<Tag:0x00007fb2f2b98f50> #<Tag:0x00007fb2f2b98e10>

#1

У меня есть страница, на которой выводится лог, но сделана она, разделением экрана на две части(не всплывающее окно)

Там есть нужные мне данные внутри тега

<MessageText>9088</MessageText>\n

К сожалению, части логов не выделяются в отдельные блоки, а идут сплошным текстом

Я использовал getPageSource() но не знаю как убрать из текста все ненужное
У меня получилось как-то так

String str = driver.getPageSource();
        System.out.println(str.substring(45975,45990));

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

И вот хотелось бы узнать, как обрезать текст от слова до слова. Обрезать все начало до &lt;MessageText&gt; и после &lt;/MessageText&gt;\n , а желательно вообще включительно теги


(Vasily) #2
String start = "<MessageText>";
String end = start.replace("<", "</");
str = str.substring(str.indexOf(start) + start.length(), 
        str.indexOf(end, str.indexOf(start) + start.length()));

#3

java.lang.StringIndexOutOfBoundsException: begin 12, end -1, length 113601


(Vasily) #4
String start = "&lt;MessageText&gt;";
String end = start.replace("&lt;", "&lt;/");

#5

Все так же(


(Vasily) #6

Ну, руки я вам вряд-ли помогу выпрямить…


#7
 String str = driver.getPageSource();

        String start = "&lt;MessageText&gt;";
        String end = start.replace("&lt;", "&lt;/");
        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

(Vasily) #8

Ну давайте уж и весь str.


#9

Он падает на str = str.substring(str.indexOf(start) + start.length(), str.indexOf(end, str.indexOf(start) + start.length()))


(Vladislav Abramov) #10

а вы дебажить не умеете?


#11

Научите)


(Vladislav Abramov) #12

почему я должен вас учить пользоваться средой разработки? погуглите, посмотрите курсы и статьи в интернете

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


#13

Дело в том что функция о которой писал [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();

Если бы я хотел просто узнать как в ява вытащить текст между двумя словами, я бы так и написал, не описывая всю ситуацию целиком


(Vladislav Abramov) #14

а вы думаете, что тут вам сразу готовую функцию дадут?


#15

Не претендую) Мне скинули вариант, я сказал что он не подходит. Если кто-то предложит еще решения, буду очень рад


(Vasily) #16

А если больше никто не предложит?


(Alexandr D.) #17

Если быстродействие неважно, то можно использовать простейшее регулярное выражение:

<MessageText>(.*)<\/MessageText>

И вытаскивать все матчи, а в них уже группу.
Искать соответственно все вхождения и в многострочном режиме.


(Vasily) #18

Воу-воу-воу, полехше!
ну и уж тогда надо писать как регулярки использовать ))


(Pavel) #19

Решение


#20

Спасибо!

String resultStr = str.substring(str.indexOf("lt;MessageText&gt;") + 1, str.indexOf("&lt;/MessageText&gt;"));

Работает