如何在String.split()中使用正则表达式

时间:2017-07-13 13:09:47

标签: 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数组,看起来像这样。

String[] Title = {"Title1 Title2","Title3 Title4","Title5 Title6","Title7"}

我正在尝试以下代码。

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

但没有获得所需的输出。

3 个答案:

答案 0 :(得分:2)

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

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]

请参阅Java demo

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

  • \\p{javaWhitespace}* - 0+ whitespaces
  • \\R - 换行符(对于Java 7及更早版本,您可以将其替换为[\r\n]
  • \\p{javaWhitespace}* - 0+空格。

或者,您可以使用更高效的

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

请参阅another demo

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

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

答案 1 :(得分:0)

这是您的解决方案。我们可以使用 StringTokenizer &我已经使用列表来插入拆分值。如果您从数组中分割了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);
        }
    }
}

答案 2 :(得分:0)

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

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