2013-03-28 8 views
8

Sono di fronte a un problema strano.
Quello che sto facendo è che sto memorizzando alcuni valori in DB (oracle 11g) come varchar2 e recuperando i valori in java e lavorando con i dati recuperati.
Ora ho \ n come valore in DB e come ottenere in java utilizzando rs.getString(). Sto ottenendo il valore corretto \n.
Java non sta trattando " n" come nuova riga quando viene recuperata dalla colonna del database

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

Ora il parsing di una pagina HTML e ottenere l'intera pagina come string.Suppose pagina ha 3 righe ciascuna depiciting ssome informazioni come qui di seguito:

Time: 08 AM - 11 AM 
Duration : 36 minutes 

Ora nel codice passerò "Durata:" a un metodo e questo mi restituirà "36 minuti".
cosa logica che uso è ottengo l'indice di "Durata:" e leggo fino a "\ n" è encountered.Code funziona bene se io dichiaro il ritorno a capo come

String newLine= "\n"; 

Ma se ho capito da DB non funziona. So che non ho bisogno di memorizzare questo in DB, ma non voglio hardcode questi elementi. Quindi devo memorizzarlo solo in DB. Qualcuno può aiutarmi in questo ???

+0

potresti essere più chiaro su cosa intendi con "Ora quando ottengo un numero di linee e voglio romperlo usando newline java non interpreta come newline". – codeMan

+0

Sei su Windows? '\ R \ n' funziona? – Keppil

+0

'\ n' è' \ n', indipendentemente da dove lo si ottiene. Se hai controllato che il valore nella variabile sia corretto, il problema è altrove, poiché Java non riconosce magicamente da dove proviene il valore della variabile. – SJuan76

risposta

10

Se quando si stampa il newLine si ottiene \n nell'output, potrebbe essere necessario unescape la stringa che si ottiene dal DB. L'Apache Commons Lang ha un metodo per questo:

http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringEscapeUtils.html#unescapeJava(java.io.Writer, java.lang.String)

Quindi si dovrebbe semplicemente chiamare

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

Spero che questo aiuti

+0

Ok cercherà di farti sapere. – Anubhab

+0

Non ho mai sentito parlare di StringEscapeUtils. Ottima soluzione ... grazie :) –

2

provare questo

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

Non è una buona idea. La proprietà 'line.separator' è determinata dall'ambiente * del sistema * del client e può essere diversa su sistemi diversi, mentre nel DB può essere memorizzata solo una rappresentazione. Pertanto, questo può funzionare su alcuni client e fallire su altri dati gli stessi dati dal DB. – JimmyB

2

Il problema è che il database è l'aggiunta di una fuga carattere alla stringa, quindi si finisce con \\ n invece di \ n. Per risolvere questo problema, puoi semplicemente sostituire \\ n con \ n.

String db_string = new String("This is a string from the db \\n This should be a new line, but is not."); 
db_string = db_string.replace("\\n", "\n"); 

Se si stampa questo si ottiene:
Questa è una stringa dal db
Questa dovrebbe essere una nuova linea, ma non lo è. // beh, ora è ..