2011-05-06 47 views
4

我正在創建一個小程序,該程序將一個int值保存到文本文件中,保存並在您再次啓動程序時加載它。現在,我需要3個布爾值存儲在文本文件中,我在文件中 n將無法正常工作,不會換行

public Formatter x; 

x.format("%s", "" + m.getPoints() + "\n"); 

寫的東西每當我想要去我的文本文件中的新生產線,以\ n,它不會去一個新的行,它會直接寫在int值的後面。我想這樣做既

 x.format("%s", "" + m.getPoints() + "\n"); 
    x.format("%s", "" + m.getStoreItem1Bought() + "\n"); 

x.format("%s%s", "" + m.getPoints() + "\n", "" + m.getBought() + "\n"); 

但是,兩者都將只寫布爾後面直接int值,而無需啓動一個新的生產線。對此有何幫助?

我使用的是Windows 7旗艦版64位,而我的文本編輯器是Eclipse,我也用Eclipse運行了所有的代碼。

+0

您使用的是Windows系統嗎? '\ n'將插入一個換行符,而不是依賴於系統的行分隔符。在Windows上,它是一個回車符,後跟一個換行符。這可能會使它看起來好像沒有任何東西在 – 2011-05-06 23:58:18

+0

之間,但是隻有很少的程序需​​要'\ r \ n',而我遇到的所有東西都只顯示爲一個盒狀字符(這不是行爲描述)。 – maaartinus 2011-05-07 00:02:10

+0

更新了OP。 – Stan 2011-05-07 00:03:30

回答

6

更具體地說,我會建議使用:

x.format("%d%n%s%n", m.getPoints(), m.getStoreItem1Bought()); 
+0

更好:'x.format((Local)(null),「%d%n%s%n」,m.getPoints(),m.getStoreItem1Bought());'。第一個'null'參數將阻止應用任何本地化。 – 2011-05-07 00:05:39

+0

這工作,把它放在一個新的路線,感謝所有你的幫助傢伙。 – Stan 2011-05-07 00:07:22

3

使用格式時,請嘗試使用%n而不是\n。有關詳細信息,請參閱Formatter API並在此頁面搜索「行分隔符」,您會看到。

+1

在我的文本文件中輸出了8%nfalse%n,沒有工作。 – Stan 2011-05-06 23:57:23

+0

我的不好。我以爲你正在使用Formatter類的變體,例如PrintStream的printf方法中使用的變體。 – 2011-05-06 23:59:37

+1

這隻適用於'Formatter.format'方法的格式化字符串部分中的'%n',而不是在參數中。 – maaartinus 2011-05-07 00:03:09

4

使用這個代替:

public static String newline = System.getProperty("line.separator"); 

這個選項工作的兩個。你的問題是你如何格式化輸出:

System.out.format("%s" + newline + "%s" + newline, "test1", "test2"); 
System.out.format("%s%n%s", "test1", "test2"); 

輸出:

test1 
test2 
test1 
test2 
+0

輸出3nullfalsenull到我的文本文件,也沒有工作。 – Stan 2011-05-06 23:59:27

+0

這確實應該起作用。除非你在'newline'被賦值之前在類初始化中做輸出。 – maaartinus 2011-05-07 00:05:46

+0

@Stan檢查如何使用它。我更新了答案 – Aleadam 2011-05-07 00:07:03

0

嗯,你的語法肯定是相當有趣..。爲什麼使用格式化方法,如果你只是將字符串拼合在一起?此外,由於你無處說明你正在使用什麼流,我們必須猜測一下,但無論如何。

反正我敢打賭,1.您使用的是Windows和2.您使用的編輯器(我在記事本上下注)只會對\ r \ n做出反應,因爲這是Windows的正確換行符。爲了解決這個問題,不要在代碼中使用硬編碼,而是使用%n並正確使用printf函數(即不要將字符串拼合在一起!)。

否則,如果你真的有一塊串起來:

String newline = System.getProperty("line.separator"); 
x.format("%s", "" + m.getPoints() + newline); 

會工作。

1

沒有問題就在這裏:

System.out.format ("first: %s%s", "" + x + "\n", "" + y + "\n"); 

雖然我prefere,至正整合\入格式字符串,而不是值:

System.out.format ("second: %s\n%s\n", x, y); 

使用Formatter.format的工作原理是一樣的。

+0

請勿使用\ n - 只能在Linux系統(和現代Mac)上可靠地運行。 %n或System.getProperty(「line.separator」)是正確的版本。如果解決方案几乎沒有工作,則無需編寫不可移植的代碼。 – Voo 2011-05-07 00:15:54

+0

取決於您喜歡用該產品做什麼。如果您需要「\ n」,請使用「\ n」,如果您需要便攜式輸出,請使用「%n」。現代編輯(記事本除外,不是現代的)通常可以處理這兩種形式的輸入。 – 2011-05-07 00:30:34