Java不是在处理“问题”\";从数据库列检索时作为新行

Java不是在处理“问题”\";从数据库列检索时作为新行,java,string,oracle11g,escaping,Java,String,Oracle11g,Escaping,我正面临一个奇怪的问题。 我正在做的是将一些值存储在DB(Oracle11g)中,作为varchar2,然后用java获取值并处理获取的数据。 现在我将\n作为DB中的一个值,并使用rs.getString()在java中获取它。我得到了正确的值\n String newLine=rs.getString("column_value"); 现在,我解析一个HTML页面,并将整个页面作为一个字符串。假设该页面有3行,每行删除ssome信息,如下所示: Time: 08 AM - 11 AM Du

我正面临一个奇怪的问题。
我正在做的是将一些值存储在DB(Oracle11g)中,作为varchar2,然后用java获取值并处理获取的数据。
现在我将\n作为DB中的一个值,并使用
rs.getString()
在java中获取它。我得到了正确的值
\n

String newLine=rs.getString("column_value");
现在,我解析一个HTML页面,并将整个页面作为一个字符串。假设该页面有3行,每行删除ssome信息,如下所示:

Time: 08 AM - 11 AM
Duration : 36 minutes
现在,在代码中,我将把“Duration:传递给一个方法,该方法将返回“36分钟”。
我使用的逻辑是获取“Duration:的索引并一直读到遇到“\n”。如果我将换行声明为

String newLine= "\n";
但是如果我从DB那里得到它,它就不起作用了。 我知道我不需要将其存储在DB中,但我不想硬编码这些项。所以我只能将其存储在DB中。有人能帮我吗???

试试这个

String newline = System.getProperty("line.separator");
boolean hasNewline = word.contains(newline);

如果打印
换行符
时在输出中获得
\n
,则可能必须取消对从数据库中获得的字符串的扫描。Apache Commons Lang有一个方法:

所以你只需要打个电话

 String newLine = StringEscapeUtils.unescapeJava(rs.getString("column_value"));

希望这能有所帮助。问题是数据库正在向字符串中添加转义字符,因此您的结果是\\n而不是\n。要解决此问题,您可以将\\n替换为\n

String db_String=new String(“这是来自db的字符串\\n这应该是新行,但不是。”);
db_string=db_string。替换(“\\n”,“\n”);
如果您打印此内容,您将得到:
这是数据库中的字符串

这应该是一条新的路线,但不是//现在是..

如果要将数据检索到HTML页面,可以执行以下操作:

String YourString = YourString.replaceAll("\\n", "<br>");

注意:
\\\\n
用于带转义符的
\\n
您好,数据库中存储的“\n”是否为两个字符“\”和“n”?注意,数据库中存储的字符串
\n
在Java中会像
“\\n”
一样返回。对,这就是问题所在:数据库中的字符串有两个字符长,
'\'
'n'
,这相当于Java表示法
“\\n”
,它同样不是换行符,而将是
'\n'
.Great:)-参考另请参见:@Anubhab数据库中必须有一个换行符,而不是两个字符'\''n'。然后Java会把它看作一个换行符,这不是一个好主意。
line.separator
属性由客户端的系统环境决定,在不同的系统上可能不同,而数据库中只能存储一个表示形式。因此,这可能在某些客户机上有效,而在其他客户机上失败,因为数据库中的数据非常相同。Ok将尝试让您知道。我以前从未听说过StringEscapeUtils。伟大的解决方案。。。谢谢:)
String YourString = YourString.replaceAll("\\\\n", "\n");