Как обрезать конкретные строки, начиная и заканчивая символом в строке в Java - PullRequest
0 голосов
/ 16 мая 2019

Я сохранил многострочную строку в Java, как показано в приведенном ниже коде, он показывает вывод в виде:

аа

бб

hhh me $ hdddhd hhhdhhdhh

HRX

$

dddsss

Мне не нужна строка, начинающаяся с hhh me $ и между строками и до $.

Мне нужно получить вывод как

* * Аа тысячу двадцать-один * * тысяча двадцать две

бб

HRX

dddsss

Я попробовал вот так на затмении

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;
import java.util.regex.Matcher;

import java.util.regex.Pattern;

public class dummyFile {

public static void main(String[] args) throws FileNotFoundException {

    String line = new StringBuilder()
            .append("aa\n\n")
            .append("bb\n\n")
            .append("hhh me $ hdddhd hhhdhhdhh\n\n")
            .append("hrx\n\n")
            .append("$\n\n")
            .append("dddsss")  
            .toString();
    System.out.println(line);

    String pattern = "hhh me (.)";

    Pattern r = Pattern.compile(pattern);

    Matcher m = r.matcher(line);

    if (m.find())
    {
        System.out.println(m.group(1));
    }

    if (line.contains("hhh me "+ m.group(1)))
    {
        line.replace(
                line.substring(
                        line.indexOf("banner mod " +m.group(1)),
                        line.lastIndexOf(m.group(1))+1
                    ),
                    ""
                )
                .replace("\n\n", "\n");
    }
    System.out.println(line);

}

}

Может кто-нибудь, пожалуйста, помогите ??

Ответы [ 2 ]

1 голос
/ 16 мая 2019

Фу, это было весело (если ты безумен, как я!)

(?!.*?\$.*?)^.+?(?:\n\n|$).*?

Вам понадобятся параметры регулярных выражений global и multiline. Для большинства экземпляров регулярных выражений это просто вопрос форматирования:

/(?!.*?\$.*?)^.+?(?:\n\n|$).*?/gm

Однако для Java вам могут потребоваться некоторые опции, я не уверен на 100%.

Этот шаблон даст вам несколько совпадений, которые вы можете склеить, например, вместе с StringBuilder.

Если вы ДЕЙСТВИТЕЛЬНО хотите, я отредактирую свой ответ и подробно остановлюсь на том, что он делает, если понадоблюсь.

0 голосов
/ 16 мая 2019

Это очень похоже на домашнюю работу, которую я не хочу делать для вас. Но я добавлю сюда кое-что, что, надеюсь, поможет вам разобраться.

Ваше регулярное выражение не будет соответствовать тому, что вы хотите. (.) будет захватывать один символ, и он не будет захватывать символы новой строки. Так что тебе придется это исправить. + соответствует одному или нескольким из предыдущего набора символов, а * соответствует нулю или более из предыдущего символа. Похоже, вы также хотите убедиться, что вы соответствуете от $ до $. Вы работаете внутри строк Java, поэтому вам нужно избегать этого.

Попробуйте что-то вроде этого для своего регулярного выражения:

final String pattern = "hhh me \\$([a-zA-Z\\s\n\r]*)\\$";

Затем в Eclipse или в Java Docs ищите в классе Matcher некоторые полезные методы для поиска / замены найденных совпадений (материал внутри () в регулярном выражении).

Может быть, что-то вроде Matcher.replaceFirst() поможет.

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