假设我有一个清单:
List<Strings> lines = new ArrayList<String>();
lines.add("one");
lines.add("");
lines.add("two three");
当我将它转换为字符串即this.str
时,它给了我以下内容:
one
two three
我正在尝试创建一个计算行数的方法,但是,它不识别空行。我试过这样做:
this.str = this.str.replaceAll("\n", "@");
String[] words = this.str.split("[\\r\\n]+");
如果我打电话给System.out.println(Arrays.toString(words)
,我期待得到[one, @, two three]
,但是,我得到[one@@two three]
而不是。我该如何解决这个问题?
this.str
实际上包含字符串:one\n\ntwo three
。这就是执行后的原因:this.str = this.str.replaceAll(“\ n”,“@”); this.str
现在包含:'one @@ two three`。
@
的数量是你在this.str
新线的数量。现在,如果你这样做:
String[] words = this.str.split("@");
你会得到["one", "", "two three"]
,这是你原来的this.str
中的行数
实际上,输出是正确的。
字符串str在单词“one”后面有两个换行符。
one\n
\n
two three
正则表达式中的+:
this.str.split("[\\r\\n]+");
表示一个或多个。问题是:你在更换\ n char!后拆分,所以现在你在数组中有一个字符串。
改变这个:
this.str.split("[\\r\\n]+");
有了这个:
this.str.split("@");