Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 删除所有空行_Java_Regex_String - Fatal编程技术网

Java 删除所有空行

Java 删除所有空行,java,regex,string,Java,Regex,String,我认为这并不难做到,但我想用String.replaceAll删除所有空行(或者在Java中只包含空格和制表符的行) 我的正则表达式如下所示: s = s.replaceAll ("^[ |\t]*\n$", ""); 但它不起作用 我环顾四周,但只找到了用于删除空行而不带空格或制表符的正则表达式。我不知道Java正则表达式的语法,但是/^\s*$[\n\r]{1,}/gm是您要找的正则表达式 您可能在Java中这样编写: s = s.replaceAll("(?m)^\\s*$[\n\r]{

我认为这并不难做到,但我想用String.replaceAll删除所有空行(或者在Java中只包含空格和制表符的行)

我的正则表达式如下所示:

s = s.replaceAll ("^[ |\t]*\n$", "");
但它不起作用


我环顾四周,但只找到了用于删除空行而不带空格或制表符的正则表达式。

我不知道Java正则表达式的语法,但是
/^\s*$[\n\r]{1,}/gm
是您要找的正则表达式

您可能在Java中这样编写:

s = s.replaceAll("(?m)^\\s*$[\n\r]{1,}", "");
我用JavaScript测试了它,效果很好。

试试这个:

String text = "line 1\n\nline 3\n\n\nline 5";
String adjusted = text.replaceAll("(?m)^[ \t]*\r?\n", "");
// ...
请注意,正则表达式与空格、制表符或管道字符匹配

编辑
B.t.w.,正则表达式
(?m)^\s+$
也会起作用。

我有一些不使用正则表达式的代码,只需导入org.apache.commons.lang3.StringUtils

  File temporaire = new File("temp.txt");
  try {
    Scanner scanner = new Scanner(yourfile);
    BufferedWriter bw = new BufferedWriter(new FileWriter(temporaire));
    while (scanner.hasNextLine()) {
      String line = StringUtils.stripEnd(scanner.nextLine(),null); // Clean blanks at the end of the line
      if (StringUtils.isNotBlank(line)) {
        bw.write(line); // Keep the line only if not blank
        if (scanner.hasNextLine()){
          // Go to next line (Win,Mac,Unix) if there is one
          bw.write(System.getProperty("line.separator"));
        }
      }
      bw.flush();
    }
    scanner.close();
    bw.close();
    fichier.delete();
    temporaire.renameTo(fichier);
  }
  catch (FileNotFoundException e) {
    System.out.println(e.getMessage());
  }
  catch (IOException e) {
    System.out.println(e.getMessage());
  }
}

如果要从Microsoft Office、Windows或支持正则表达式呈现的文本编辑器中删除行,请执行以下操作:

 1. Press <kbd>Ctrl</kbd> + <kbd>F</kbd>.
 2. Check the regular expression checkbox
 3. Enter Expression ^\s*\n into the find box as it is.
1。按Ctrl+F。
2.选中正则表达式复选框
3.按原样在“查找”框中输入表达式^\s*\n。

您将看到编辑器中的所有黑色空格消失…

您可以使用以下代码从代码中删除空行:

String test = plainTextWithEmptyLines.replaceAll("[\\\r\\\n]+","");

此处,
plainTextWithEmptyLines
表示具有空行的字符串
[\\\r\\\n]
是用于识别空行中断的正则表达式模式。

我不是一个日常的Java程序员,所以我很惊讶在JDK中没有比正则表达式更简单的方法

反正

s = s.replaceAll("\n+", "\n");
会简单一点

更新:

很抱歉,我没有注意到您还想删除空格和制表符

s = s.replaceAll("\n[ \t]*\n", "\n");
如果你有一致的换行符就行了。如果不是,你可能想考虑让它们保持一致。例如:

s = s.replaceAll("[\n\r]+", "\n");
s = s.replaceAll("\n[ \t]*\n", "\n");
缺少字符串最后一行为空或包含空格的边缘情况

如果你尝试


String text=“第1行\n\nline 3\n\n\nline 5\n”;// 此方法通过java仅删除空行:

private String removeEmptyLines(String text) {
    final String[] strings = text.split("\n");
    StringBuilder result = new StringBuilder();
    for (int i = 0, stringsLength = strings.length; i < stringsLength; i++) {
        String str = strings[i];
        if (str.isEmpty()) continue;
        result.append(str);
        if (i + 1 == stringsLength) continue;
        result.append("\n");
    }
    return result.toString();
}
private String removemptylines(字符串文本){
最终字符串[]字符串=text.split(“\n”);
StringBuilder结果=新建StringBuilder();
for(int i=0,stringsLength=strings.length;i
除了需要用java编写\\s之外,这不起作用:(请参阅编辑。也考虑使用<代码> <代码>代替您定义的自定义类,也检查<代码> > \n <代码>,<代码> \r>代码>或两者都作为行分隔符。您可能希望查看编译选项:<代码>模式。UNIXY线,<代码>模式。DOOSTOR> ,和<代码>模式。比如说,
\n
不是行分隔符,而是行终止符。字符串
:foo:bar:
如果以冒号分隔,则有2个字段,如果以冒号终止,则有3个字段,如果以冒号分隔,则有4个字段。这确实有区别。@tchrist按照您的约定,我应该称它们为行分隔符,但我考虑了分隔符和分隔符同义词。虽然分隔符描述了
\n
更好一些,但我不认为这是一个值得讨论的重要问题。我也不能编辑我的注释。@Val,
(?m)
,而不是
(m?
,启用多行模式。有关编辑解决方案的详细信息,请查看此链接:关于行结束匹配如果您希望删除空白行,则应该删除(<代码> $>代码>)。否则,正则表达式只会删除行中的任何空白字符,而仍然保留行。示例不正确地跳过java字符串。实际上,需要这样重复:<代码>(?m)^ [\t]。*\\r?\\n
。顺便说一句,一个较短的表达式是:
(?m)^\\s*\\n
@gucce“示例没有正确地转义Java字符串中的\n”这是因为这里不需要转义
\
,它是故意这样使用的。
\t
字符串文字表示传递给正则表达式引擎的制表符字符,正则表达式引擎没有问题,因为它与其他任何字符一样。正则表达式允许我们使用
\\t
\\n
\\r(因为一些IDE会自动将转义添加到
\
中,使其在复制粘贴到代码时成为
\\
)但这并不意味着它比
\t
\n
\r
更受欢迎。仅仅搜索正则表达式并不会使空格消失,是吗?尽管如此,这个正则表达式可能是所有OP需要的。如果使用replaceAll(),则检查制表符、返回值与\s as不必要,并且匹配多行是无用的。你有我的投票权。虽然你可能应该编辑答案来说明这一点。并将其设置为关于
String
,因为这是问题的具体要求。这不适用于包含空格或制表符的行,当然也不适用于CRLF和LF lineendingsAh,抱歉。我假设行结尾一致,但没有达到你想要的效果删除了空格和制表符。这对我来说是一个很好的解决方案,但我改变了一件小事,因为它将一些行合并在一起,在我的例子中,
\\s
变成了
[\t]
。我不是用Java编写的,但这是RegexBuddy为Java 8提供的,
字符串resultString=subjectString.replaceAll((?m^\\s*\r?\n |\r?\n[\t]*(?!!.\r?\n)”,“”);
private String removeEmptyLines(String text) {
    final String[] strings = text.split("\n");
    StringBuilder result = new StringBuilder();
    for (int i = 0, stringsLength = strings.length; i < stringsLength; i++) {
        String str = strings[i];
        if (str.isEmpty()) continue;
        result.append(str);
        if (i + 1 == stringsLength) continue;
        result.append("\n");
    }
    return result.toString();
}