我有一个例子
test¶test1¶test2¶test3
这应该返回4
然而
test¶test1¶test2¶
应返回3,因为第3个换行符后没有文字。
我可以做类似
的事情str.split("\n").length
这只会给我一些换行符。我不确定尝试在换行符之间返回文本。正则表达式会起作用吗?
感谢您的帮助
答案 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)
答案 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