首页 > 解决方案 > 如何在java中修剪以字符开头和结尾的特定行

问题描述

我已将多行字符串存储在 java 中,如下面的代码所示,它显示输出为:

bb

hhh 我 $ hdddhd hhhdhhdhh

hrx

$

dddss

我不需要以 hhh me $ 开头的行以及行间到 $ 的行。

我需要得到输出

bb

hrx

dddss

我在eclipse上试过这样

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);

}

}

有人可以帮忙吗?

标签: regexjava-8

解决方案


唷,这很有趣(如果你像我一样疯了!)

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

您将需要正则表达式选项globalmultiline. 对于大多数正则表达式实例,只需将其格式化为:

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

但是对于 Java,您可能需要提供一些选项,我不能 100% 确定。

该模式将为您提供多个匹配项,例如,您可以使用 StringBuilder 将它们粘合在一起。

如果你真的想要,我会编辑我的答案,如果你需要我,我会准确地分解它在做什么。


推荐阅读