Java 如何将正则表达式与String.split()一起使用

Java 如何将正则表达式与String.split()一起使用,java,regex,string,split,Java,Regex,String,Split,我有以下字符串: String fullPDFContex = "Title1 Title2\r\nTitle3 Title4\r\n\r\nTitle5 Title6\r\n \r\n Title7 \r\n\r\n\r\n\r\n\r\n" 我想把它转换成一个字符串数组,如下所示 String[] Title = {"Title1 Title2","Title3 Title4","Title5 Title6","Title7"} 我正在尝试以下代码 String[] Title=full

我有以下字符串:

String fullPDFContex = "Title1 Title2\r\nTitle3 Title4\r\n\r\nTitle5 Title6\r\n \r\n Title7 \r\n\r\n\r\n\r\n\r\n"
我想把它转换成一个字符串数组,如下所示

String[] Title = {"Title1 Title2","Title3 Title4","Title5 Title6","Title7"}
我正在尝试以下代码

String[] Title=fullPDFContext.split("\r\n\r\n|\r\n \r\n|\r\n");

但是没有得到期望的输出。

这是您的解决方案。我们可以使用StringTokenizer&我已经使用list插入了拆分的值。如果从数组中拆分了n个值,这将对您有所帮助

package com.sujit;

import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

public class UserInput {

    public static void main(String[] args) {
        String fullPDFContex = "Title1 Title2\r\nTitle3 Title4\r\n\r\nTitle5 Title6\r\n \r\n Title7 \r\n\r\n\r\n\r\n\r\n";
        StringTokenizer token = new StringTokenizer(fullPDFContex, "\r\n");
        List<String> list = new ArrayList<>();
        while (token.hasMoreTokens()) {

            list.add(token.nextToken());
        }
        for (String string : list) {
            System.out.println(string);
        }
    }
}
package com.sujit;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.StringTokenizer;
公共类用户输入{
公共静态void main(字符串[]args){
String fullPDFContex=“Title1 Title2\r\ntile3 Title4\r\n\r\ntile5 Title6\r\n\r\n Title7\r\n\r\n\r\n\r\n\r\n”;
StringTokenizer令牌=新的StringTokenizer(fullPDFContex,“\r\n”);
列表=新的ArrayList();
while(token.hasMoreTokens()){
添加(token.nextToken());
}
用于(字符串:列表){
System.out.println(字符串);
}
}
}

使用此代码,您可以获得所需的输出:

String[] Title = fullPDFContext.split(" *(\r\n ?)+ *");

您需要使用与包含换行符的任意数量的空白相匹配的模式进行拆分:

String fullPDFContex = "Title1 Title2\r\nTitle3 Title4\r\n\r\nTitle5 Title6\r\n \r\n Title7 \r\n\r\n\r\n\r\n\r\n";
String separator = "\\p{javaWhitespace}*\\R\\p{javaWhitespace}*";
String results[] = fullPDFContex.split(separator);
System.out.println(Arrays.toString(results));
// => [Title1 Title2, Title3 Title4, Title5 Title6, Title7]

\\p{javaWhitespace}*\\R\\p{javaWhitespace}*
匹配

  • \\p{javaWhitespace}*
    -0+空格
  • \\R
    -换行符(对于Java 7及更早版本,您可以将其替换为
    [\R\n]
  • \\p{javaWhitespace}*
    -0+空格
或者,您可以使用更高效的方法

String separator = "[\\s&&[^\r\n]]*\\R\\s*";

不幸的是,
\R
构造不能在字符类中使用。模式将匹配:

  • [\\s&&[^\r\n]]*
    -除CR和LF之外的零个或多个空格字符(此处使用字符类减法)
  • \\R
    -换行符
  • \\s*
    -任何0+空格字符

如果换行符是
\n
\r
,并且换行符之前/之后有制表符,则此操作不起作用。看看我的解决方案,你的答案更完整(并且被接受)。我的回答(有意地)没有假设OP想要什么。嗯,
\\p{javaWhitespace}
可能太长了。类似但更有效的模式是
“[\\s&&[^\r\n]]*\\r\\s*”
“[\\s&&[^\r\n]]*[\r\n]\\s*”