2015-05-12 10 views
8

Dlaczego nie jest b równa się , jeśli uruchamiasz ten kod w systemie Windows?Jak ustawić "% n" na " n"

System.setProperty("line.separator", "\n"); 
String s=String.format("%n"); 
boolean b="\n".equals(s); 

Chcę s być "\n" i nie "\r\n", nawet w systemie Windows.

+0

@RealSkeptic Ponieważ mój kod powinien produkować ten sam wynik na wszystkich platformach. –

+9

powinieneś po prostu użyć '\ n' zamiast'% n' ... chyba że kod nie jest pod Twoją kontrolą. – ZhongYu

Odpowiedz

5

Niestety, jedynym sposobem jest tu refleksja:

Field lineSeparator = System.class.getDeclaredField("lineSeparator"); 

lineSeparator.setAccessible(true); 
lineSeparator.set(null, "\n"); 
3

Problem polega na tym, że lineSeparator jest zdefiniowany i zainicjowany w klasie System.

Przed wywołaniem System.setPropety(), klasa System jest już zainicjalizowana, a lineSeparator jest inicjowana do właściwości systemowej w tym momencie. Nie zmieni się później.

Będziesz musiał przejść na własność systemu opcji wiersza poleceń ...

Albo, być może uda się wykorzystać odbicie na siłę zmienić pole System.lineSeparator. To nie gwarantuje działania.

+0

Ale 'System.setProperty (" line.separator "," \ n ");' jest brane pod uwagę, jeśli używam metod zapisu takich jak 'Files.write'. –

+1

cóż, może to być pobieranie bieżącej właściwości systemu; natomiast 'String.format' nie ma. – ZhongYu

+0

Czy nie ma nadziei, aby 'String.format' pobrać bieżącą właściwość? –

Powiązane problemy