【问题标题】:How do I replace all blank lines with "@"?如何用“@”替换所有空行?
【发布时间】:2019-04-12 17:41:33
【问题描述】:

假设我有一个列表:

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]。我该如何解决?

【问题讨论】:

  • 答案是否取决于您未指定的语言?

标签: java list split whitespace


【解决方案1】:

this.str 实际上包含字符串:one\n\ntwo three。这就是为什么执行后: this.str = this.str.replaceAll("\n", "@"); this.str 现在包含:'一@@二三`。

@ 的数量是您在this.str 中的新行数。 现在,如果你这样做:

String[] words = this.str.split("@");

你会得到["one", "", "two three"],这是你在原始this.str中的行数

【讨论】:

  • 只是一个小问题,如果列表包含 2 个空行而不是 lines.add("") 两次,并且我想获得 ['',''],是否也会像您建议的那样工作?跨度>
  • 是的,看起来你从字符串数组转换的this.str 将变成\n\n 字符串。
  • 一般来说 - 对于您添加到 lines 并转换为 this.str 的每个字符串,在其末尾添加一个 \n
  • 我刚刚尝试过做同样的事情,但我最终得到了[],这有什么问题?
  • 请分享您如何将该字符串数组转换为 str,我会尽力提供帮助
【解决方案2】:

其实输出是正确的。

字符串 str 在单词“one”之后有两个换行符。

one\n
\n
two three

正则表达式中的+

this.str.split("[\\r\\n]+");

表示一个或多个。 问题是:您在替换 \n 字符后进行拆分!,所以现在数组中有一个字符串。

改变这个:

this.str.split("[\\r\\n]+");

用这个:

this.str.split("@");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    • 2018-04-15
    • 2023-03-29
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    相关资源
    最近更新 更多