【问题标题】:Removing new Line from sql record via Java通过Java从sql记录中删除新行
【发布时间】:2016-04-16 20:20:46
【问题描述】:

我正在使用 JPA 读取和操作 MS SQL 表。我在单元格中有要通过删除换行符来清理的文本。下面是一个文本示例(将其粘贴到 notepad++ 中,每行显示 **CR LF**):

(
(NVSM in (1,2)) and
(NISFVSM in (1,2)) and
(TRMBVSM = 0)
)

我已经尝试了以下代码,但我无法摆脱换行符

flatTextString.trim()
        .replace(System.getProperty("line.separator"), " ")
        .replaceAll("\t", "")
        .replaceAll("(\\r|\\n)", "")
        .replaceAll("\\s{2,}", " ")
        ;

我该如何解决这个问题?

【问题讨论】:

  • 是否有理由用空格替换换行符?也许只是\R+ => '' 替换就足够了?或者 [\r\n]+ => ' ' 如果您需要用空格替换 1 个或多个换行符?
  • 如果你的意思是 "line.separator"), " " 是的,它必须是这样,因为在其他文本单元格中,如果我用 "" 替换它会出现问题
  • 不应该 replaceAll("(\\r|\\n)", "") 那样做吗?
  • 参见this demo,您的代码删除了换行符。我添加了flatTextString.replaceAll("[\r\n]+", " "),它的输出是一样的。
  • 那么,你现在问的是一个不同的问题,还是你之前没有提到这个问题:)?我想您需要在左括号之后和右括号之前删除空格:.replaceAll("\\s+\\)", ")").replaceAll("\\(\\s+", "(")。见this demo。第一个输出是我的代码。

标签: java sql regex


【解决方案1】:

我建议只用空格替换所有换行符和回车符,然后在关闭 ) 之前和打开 ( 之后删除所有空格:

String flatTextString = "(\r\n(NVSM in (1,2)) and\r\n(NISFVSM in (1,2)) and\r\n(TRMBVSM = 0)\r\n)";
System.out.println(flatTextString.replaceAll("[\r\n]+", " ").replaceAll("\\s+\\)", ")").replaceAll("\\(\\s+", "(")); // My way
// => ((NVSM in (1,2)) and (NISFVSM in (1,2)) and (TRMBVSM = 0))

IDEONE demo

由于 Java 正则表达式不能使用条件替换模式,您只能链接 replaceAll 方法,如我在上面的代码 sn-p 中所示。

【讨论】:

  • 很高兴它对你有用。如果我的回答对您有帮助,也请考虑投票。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-06
  • 1970-01-01
  • 2019-11-01
  • 2021-11-23
  • 1970-01-01
相关资源
最近更新 更多