【问题标题】:Java detect and replace linebreaks with \n [duplicate]Java检测并用\ n替换换行符[重复]
【发布时间】:2016-02-06 14:18:01
【问题描述】:

我从我的数据库中得到这个字符串:

Test Action Item ZusammenführenTest Action Item ZusammenführenTest Action Item ZusammenführenTest Action Item ZusammenführenTest Action Item ZusammenführenTest Action Item Zusammenführen
fsd
fsa
df
asdf
as
dfs
fd
sad
f
sadf
sad

现在我需要将所有 LineBreaks 编码为 \n 以便我可以从字符串中生成正确的 JSON 对象,因为 JSON 不支持换行符。如何检测现有字符串中的所有换行符并将其替换为 \n?

我已经尝试过 .replace() 和 replaceAll()。但我需要一种方法来检测换行符,以便我可以替换它们。

一些附加信息:

在尝试了这里提到的几个替换功能后,JSON 仍然看起来像这样:

   { "id": 182, 
     "status": "eing", 
     "text": "KORE_AI_6", 
     "beschreibung": "Eins
Zwei
Drei",
         "tags": "KORE" 
       }, 

它应该看起来像

   { "id": 182, 
     "status": "eing", 
     "text": "KORE_AI_6", 
     "beschreibung": "Eins\nZwei\nDrei",
     "tags": "KORE" 
   },

【问题讨论】:

  • 如果你的换行符不是\n,它们是什么?
  • 不幸的是,对 \n 的搜索失败了 没有得到任何结果。我不知道,这就是我问的原因。
  • 你能把搜索\n的代码也贴出来吗?您问题中的字符串是您从数据库中获得的实际字符串还是您通过查看器看到的字符串?
  • 如果行没有被\n 分隔,可能它们被Unicode 行分隔符或段落分隔符分隔。试试s.replaceAll("[\\p{Zl}\\p{Zp}]|\\r?\\n", "\n")
  • 我知道尝试过您的解决方案 VGR,但遗憾的是 JSON 对象仍然有其换行符,而不是 /n。

标签: java json encode


【解决方案1】:

我为我解决了这个问题。不幸的是,似乎.replace() 就像上面在其他 cmets 和答案中所说的那样完成了这项工作,但是 map.put() 操作之后再次恢复了更改。

为了解决这个问题,我使用了org.apache.commons.lang3.StringEscapeUtils 中的StringEscapeUtils 并使用了escapeJson() 方法,如下所示:

escapeUtils.escapeJson(map.get("BESCHREIBUNG").toString())

【讨论】:

    【解决方案2】:

    如果您从数据库中获得的String 称为jsonString,您可以使用这个正则表达式:

    String result = jsonString.replaceAll("[\r\n]+", "\n");
    

    这将匹配最常见的换行符\r\n\n\r。请注意,这也会用一个空行替换多个空行。

    【讨论】:

    • 我尝试了您的解决方案,但 JSON 字符串仍有换行符,导致客户端的 JSON 解析器出错。
    猜你喜欢
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    相关资源
    最近更新 更多