一、是什么
在Linux和MacOS中行分隔符为"\n",在Windows中为"\r\n"。至于为什么会造成这个差异,可以看下参考文章链接。下面说说这两者究竟是什么
- 回车:Carriage Return(CR) “\r”,表示将光标返回至所在行头部
- 换行:Line Feed(LF) “\n”,表示将光标置入下一行
二、为什么
"\n"作为换行符很好理解,面对很长一行文字时计算机读取能够不费吹灰之力,但人类读取就非常费力了。’\n’可以将文字换行切分。
那么“\r"呢?我什么时候才需要将光标返回所在行头部呢?这样不会造成覆盖吗?平常我们在用包管理命令下载软件时,经常能够看到在某一行持续不断地打印下载进度,在我搜索这个是怎么实现的时候,发现"\r"就是实现方式之一。
三、回车符实现进度条
下面用一段Java代码模拟一下
import java.util.concurrent.TimeUnit;
public class PrintProgressTest {
public static void main(String[] args) throws InterruptedException {
int totalLen = 50;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < totalLen; i++) {
sb.append("#");
System.out.print("\r" + sb.toString());
for (int j = 0; j < totalLen-sb.length(); j++) {
System.out.print(" ");
}
System.out.printf("|%f%%",(sb.length()*1.0/totalLen)*100);
TimeUnit.MILLISECONDS.sleep(200);
}
}
}