HishamMohammedA Ответов: 2

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


У меня есть строка, и я хочу вырезать часть строки и сохранить ее в другой строке, и первая строка должна быть сохранена, но без той части, которая должна быть вырезана.
строка может быть изменчивой, но я хочу получить концепцию.
например, если у меня есть:

String str1 = "hello world cout<<"hi,this is Sunday"<<endl;

Я хочу отрезать эту часть:
cout<<"hi,this is Sunday"<<endl;


и сохраните его в другой строке, и результат должен быть:

String str1 = "hello world";

и новая строка должна иметь вырезанное содержимое.

String str2 = cout<<"hi,this is Sunday"<<endl;


Что я уже пробовал:

Я попытался использовать заменить все этим регулярным выражением

String Str2 = Str1.replaceAll("cout<<.*\n?;", "");

но здесь я удаляю только ту часть, которую хочу сохранить полностью, и не могу найти способ сохранить ее в другой строке.



Заранее спасибо

Gerry Schmitz

если бы вы использовали <...>, вместо <...<, это сделало бы вещи проще.

2 Ответов

Рейтинг:
2

Richard MacCutchan

String str1 = "hello world cout<<\"hi,this is Sunday\"<<endl";
int index = str1.indexOf("cout");
System.out.printf("index: %d\n", index);
String part1 = str1.substring(0, index);
String part2 = str1.substring(index);
System.out.printf("part1: %s\n", part1);
System.out.printf("part2: %s\n", part2);


HishamMohammedA

Спасибо за ваш повтор @Richard, но моя главная проблема заключается в том, что, как я уже упоминал, мой текст будет каждый раз отличаться, и я ищу только тот текст, который хочу извлечь, используя регулярное выражение в качестве параметра, но я считаю, что indexOf не может получить регулярное выражение в качестве параметра.

HishamMohammedA

например, если у меня есть такая строка, String str ="if(i=1)cout<

HishamMohammedA

извините за разделение двух комментариев, но он отказывается поместить полную строку.
В indexOf я могу поставить букву "c", и она сократит то, что последует за ней, но, как вы можете видеть, в этом случае я уже знаю пример, но что делать, если cout будет изменен, то я не могу полагаться на букву "c", поэтому я хочу использовать регулярное выражение if condition, чтобы оно сократило то, что последует за ним, и сохранило его в новой строке

Richard MacCutchan

Проблема одна и та же, какой бы метод вы ни использовали. Вы должны знать, где разделить строку. Если он находится на "cout" или "print", то вам нужна эта информация, прежде чем вы сможете это сделать. И регулярное выражение не поможет вам, если поисковые слова отличаются.

HishamMohammedA

Я устал от регулярных выражений, но вы правы, я должен знать ту часть, которую я должен обработать, поэтому, возможно, я попрошу пользователя поставить метку или что-то еще перед той частью, которую я хочу взять, чтобы сделать это проще, так как строка будет меняться каждый раз.
Спасибо, Ричард, что помог мне.

Richard MacCutchan

Рад помочь. Удачи вам в том, чтобы заставить пользователя сделать то, что вы просите.

Рейтинг:
0

Richard MacCutchan

Это было бы проще в использовании String.indexOf (Java SE 11 & JDK 11 )[^] и String.substring (Java SE 11 & JDK 11 )[^]


HishamMohammedA

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

Richard MacCutchan

Вот почему вы должны использовать indexOf.

HishamMohammedA

можете ли вы привести пример

Richard MacCutchan

Посмотрите на документацию, она четко объясняет, как найти индекс строки. Как только у вас есть это число, то извлечение двух подстрок-простое дело. Если вы стремитесь стать разработчиком, то вам нужно попробовать что-то новое. Чем больше вы практикуетесь, тем лучше ваши навыки.

HishamMohammedA

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

Richard MacCutchan

Используйте метод indexOf, чтобы найти положение ключевой информации. Затем вы можете использовать substring для извлечения двух строк. Я не понимаю, в чем проблема?