2013-03-28 5 views
8

Mam do czynienia z dziwnym problemem.
Co robię jest przechowywanie niektórych wartości w DB (oracle 11g) jako varchar2 i pobierania wartości w java i pracy z pobranych danych.
Teraz mam \ n jako wartość w DB i pobieranie go w java przy użyciu rs.getString(). Dostaję prawidłową wartość \n.
Java nie traktuje " n" jako nowej linii po pobraniu z kolumny bazy danych

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

Teraz ja analizować stronę HTML i dostać całą stronę jako string.Suppose strony ma 3 linie każdy depiciting ssome informacje jak poniżej:

Time: 08 AM - 11 AM 
Duration : 36 minutes 

Teraz w kodzie będzie mijam "Czas trwania:" do metody, która zwróci mi "36 minut".
Co logika używam to ja dostać indeks „Czas trwania:” i czytać do „\ n” jest encountered.Code działa dobrze jeśli zadeklarować przełamane jak

String newLine= "\n"; 

Ale jeśli dostanę go z DB to nie działa. Wiem, że nie trzeba przechowywać tego w DB, ale nie chcę hardcode tych elementów. Muszę więc przechowywać go tylko w DB. Czy ktoś może mi w tym pomóc?

+0

Czy możesz być bardziej jasne, co masz na myśli przez "Teraz, gdy dostaję liczbę linii i chcesz ją złamać za pomocą nowej linii java nie interpretuje jako nowej linii." – codeMan

+0

Czy jesteś w systemie Windows? Czy '\ r \ n' działa? – Keppil

+0

'\ n' jest' \ n', niezależnie od tego, skąd je bierzesz. Jeśli sprawdzisz, czy wartość w zmiennej jest poprawna, problem jest w innym miejscu, ponieważ Java nie wie w magiczny sposób, skąd pochodzi wartość zmiennej. – SJuan76

Odpowiedz

10

Jeśli podczas drukowania newLine masz \n na wyjściu, może trzeba przywróceniu znaczenia ciąg otrzymasz od DB. Apache Commons Lang ma sposób, że:

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

Więc trzeba po prostu zadzwonić

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

Nadzieja to pomaga

+0

OK spróbuję i dam ci znać. – Anubhab

+0

Nigdy wcześniej nie słyszałem o StringEscapeUtils. Świetne rozwiązanie ... dziękuję :) –

2

spróbować

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

Niezbyt dobry pomysł. Właściwość 'line.separator' jest określana przez * środowisko systemowe * klienta i może być różna w różnych systemach, podczas gdy tylko jedna reprezentacja może być przechowywana w DB. Dlatego może to działać na niektórych klientach i zawieść na innych, biorąc pod uwagę te same dane z DB. – JimmyB

2

Problem polega na tym, że baza danych jest dodanie ucieczkę znak do łańcucha znaków, więc otrzymasz \ n zamiast \ n. Aby to naprawić, możesz po prostu zamienić \\ n na \ 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"); 

przypadku drukowania tego dostaniesz:
To jest łańcuch z db
powinien to być nowy wiersz, ale nie jest. // dobrze, że teraz jest ..

Powiązane problemy