重复附加到字符串时无法添加换行符
Can't add a newline when repeatedly appending onto a string
我正在尝试写入具有特定格式的文本文档。这是我现在拥有的。
String line = "";
double totalCost = 0;
Node curr = summary.head.next;
while(curr!=summary.tail)
{
line += [an assortment of strings and variables] +"\r";
totalCost += PRICELIST.get(curr.itemName)*curr.count;
curr = curr.next;
}
write.printf("%s" + "%n", line);
这是添加到线上的部分实际的样子。
"Item's name: " + curr.itemName + ", Cost per item: " + NumberFormat.getCurrencyInstance().format(PRICELIST.get(curr.itemName)) +
", Quantity: " + curr.count + ", Cost: " + NumberFormat.getCurrencyInstance().format(PRICELIST.get(curr.itemName)*curr.count) + "\r";
我也尝试过使用换行符。在我让它工作之前,当打印语句在循环内意味着它一次只写一行。我想这样做是因为我将有多个线程写入这个文件,这样任何线程都不会持有锁那么久。
使用 System.getProperty("line.separator") 代替“\r”
尽管缓存 ir 以提高效率。
您也可以尝试结合使用\n\r
。这对我的一个项目很有帮助。
如果使用 Java 7 或更高版本,您可以使用 System.lineSeparator()
首先不要使用
while(..){
result += newString
..
}
内部循环。这是非常低效的,尤其是对于长文本,因为每次调用
result += newString
您正在创建新字符串,它需要复制 result
的内容并附加到 newStrint
。所以到目前为止你处理的文本越多,它需要复制的越多,所以它变得越慢。
改为使用
StringBuilder sb = new StringBuilder();
while(..){
sb.append(newString);
}
result = sb.toString.
在你的情况下应该更像
sb.append("Item's name: ").append(curr.itemName)
.append(", Cost per item: ").append(NumberFormat.getCurrencyInstance().format(PRICELIST.get(curr.itemName)))
.append(", Quantity: ").append(curr.count )
.append(", Cost: ").append(NumberFormat.getCurrencyInstance().format(PRICELIST.get(curr.itemName) * curr.count))
.append(System.lineSeparator());
也代替了
write.printf("%s" + "%n", line);
你应该使用更简单的版本,即
write.println(line);
根据OS自动添加行分隔符。
我正在尝试写入具有特定格式的文本文档。这是我现在拥有的。
String line = "";
double totalCost = 0;
Node curr = summary.head.next;
while(curr!=summary.tail)
{
line += [an assortment of strings and variables] +"\r";
totalCost += PRICELIST.get(curr.itemName)*curr.count;
curr = curr.next;
}
write.printf("%s" + "%n", line);
这是添加到线上的部分实际的样子。
"Item's name: " + curr.itemName + ", Cost per item: " + NumberFormat.getCurrencyInstance().format(PRICELIST.get(curr.itemName)) +
", Quantity: " + curr.count + ", Cost: " + NumberFormat.getCurrencyInstance().format(PRICELIST.get(curr.itemName)*curr.count) + "\r";
我也尝试过使用换行符。在我让它工作之前,当打印语句在循环内意味着它一次只写一行。我想这样做是因为我将有多个线程写入这个文件,这样任何线程都不会持有锁那么久。
使用 System.getProperty("line.separator") 代替“\r”
尽管缓存 ir 以提高效率。
您也可以尝试结合使用\n\r
。这对我的一个项目很有帮助。
如果使用 Java 7 或更高版本,您可以使用 System.lineSeparator()
首先不要使用
while(..){
result += newString
..
}
内部循环。这是非常低效的,尤其是对于长文本,因为每次调用
result += newString
您正在创建新字符串,它需要复制 result
的内容并附加到 newStrint
。所以到目前为止你处理的文本越多,它需要复制的越多,所以它变得越慢。
改为使用
StringBuilder sb = new StringBuilder();
while(..){
sb.append(newString);
}
result = sb.toString.
在你的情况下应该更像
sb.append("Item's name: ").append(curr.itemName)
.append(", Cost per item: ").append(NumberFormat.getCurrencyInstance().format(PRICELIST.get(curr.itemName)))
.append(", Quantity: ").append(curr.count )
.append(", Cost: ").append(NumberFormat.getCurrencyInstance().format(PRICELIST.get(curr.itemName) * curr.count))
.append(System.lineSeparator());
也代替了
write.printf("%s" + "%n", line);
你应该使用更简单的版本,即
write.println(line);
根据OS自动添加行分隔符。