在换行符之间获取文本

时间:2012-01-27 13:21:34

标签: java

我有一个例子

test¶test1¶test2¶test3

这应该返回4

然而

test¶test1¶test2¶

应返回3,因为第3个换行符后没有文字。

我可以做类似

的事情
str.split("\n").length

这只会给我一些换行符。我不确定尝试在换行符之间返回文本。正则表达式会起作用吗?

感谢您的帮助

5 个答案:

答案 0 :(得分:2)

String[] text = str.split("\n");
for( String t : text ) {
    System.out.println(t);
}

答案 1 :(得分:0)

通过删除开头和结尾处的换行符(trim)来预处理字符串,并在需要时删除中间的重复换行符。 然后使用您的代码:

str.split("\n").length

正则表达式做了所有这些有趣但可读性会受到影响。

修改:正则表达式很简单,但您必须计算匹配项:

    private int getMatchCount(String s){
    int count = 0;
    Matcher m = Pattern.compile("\\w+").matcher(s);
    while (m.find())
        count++;
    return count;
}

答案 2 :(得分:0)

使用commons-lang中的拆分对我有效:

StringUtils.split(s, "\r\n").length

(添加了\r以避免因行分隔符问题而跳闸......

答案 3 :(得分:0)

这个怎么样?

我使用“”(空格)作为分隔符,您可以用\\ n替换\\ s以获得所需的结果

public static int getNumberOfTokens(String input){
    int result = 0;
    if(!input.endsWith(" ")) input = input + " ";
    Pattern p = Pattern.compile("\\s*(.+?)\\s+");
    Matcher m = p.matcher(input);
    while(m.find()){
       ++result;
       System.out.println(m.group(1));
    }
    return result;
}

答案 4 :(得分:0)

这是一个相对简单的方法:

str.replaceFirst("^\n+", "").split("\n+").length

str.replaceFirst("^\n+", "")部分会创建str的副本,其中任何前导新行都会被删除。 split("\n+")部分按一个或多个换行符的顺序拆分字符串(因此忽略空白行),并丢弃任何尾随空白。

"^\n+""\n+"是简单的正则表达式:"\n+"表示“一个或多个连续的换行符”,"^\n+"表示“一开始就有一个或多个连续的换行符字符串“。

因此,例如,如果str"\n\nYES\nNO\n\nMAYBE\n",那么我们有:

 expression                                       | value
--------------------------------------------------+--------------------------
 str                                              | "\n\nYES\nNO\n\nMAYBE\n"
 str.replaceFirst("^\n+", "")                     | "YES\nNO\n\nMAYBE\n"
 str.replaceFirst("^\n+", "").split("\n+")        | {"YES", "NO", "MAYBE"}
 str.replaceFirst("^\n+", "").split("\n+").length | 3