回车
\n是换行符,这并不是java中的规定,而是更广泛的计算机领域中均为此含义。
1、提到\n就不能不提\r(回车),下面,详细讲解一下:
在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。
于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。
这就是“换行”和“回车”的来历,从它们的英语名字上也可以看出一二。
后来,计算机发明了,这两个概念也就被般到了计算机上。那时,存储器很贵,一些科学家认为在每行结尾加两个字符太浪费了,加一个就可以。于是,就出现了分歧。
Unix系统里,每行结尾只有“<换行>”,即“\n”;
windows系统里面,每行结尾是“<换行><回车>”,即“\n\r”;
Mac系统里,每行结尾是“<回车>”。一个直接后果是,Unix/Mac系统下的文件在Windows里打开的话,所有文字会变成一行;而Windows里的文件在Unix/Mac下打开的话,在每行的结尾可能会多出一个^M符号。
\r回车是将光标移到一行的前面
\n是移到下一行
2、示例
System.out.print(“\n”);
如上代码表示在控制台中换一行
以上内容引自:https://zhidao.baidu.com/question/399628743.html
注意:在Java中nextint()方法接收一个整型字符,不会读取\n,nextline()读入一行文本,会读入”\n”字符,但”\n”并不会成为返回的字符
例1:
import java.util.scanner;
/**
* Created by AdMinistrator on 2017/8/31.
*/
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()) {
String s=sc.nextLine();
int k=sc.nextInt();
System.out.println(s);
System.out.println(k);
}
}
}
来看一下上面代码的执行结果
当我输入abc时程序抛错:
当我进行第一轮次输入时:
s=’abcd\n\r’
k=’5\r’
此时控制台输入第一个5的那行还有一个‘\n’没有被读取
当我进行第二轮次输入时:
s=’\n’
k=’abc’
这时的s自动读到的上一次未读的‘\n’,我们再输入数时就是给k赋值了,而我输入的是abc所以抛错。
当然在真正运行程序时,并不会读取‘\n\r’以上仅为模拟,方便理解。真实读取情况如下:
当我进行第一轮次输入时:
s=’abcd’
k=’5’
此时控制台输入第一个5的那行还有一个‘\n’没有被读取
当我进行第二轮次输入时:
s=”
k=’abc’
例2:当我将上例中的剩余的‘\n’给‘吃掉’时,就不会出现错误
import java.util.Scanner;
/**
* Created by Administrator on 2017/8/31.
*/
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()) {
String s=sc.nextLine();
int k=sc.nextInt();
String ss=sc.nextLine();
System.out.println(s);
System.out.println(k);
}
}
}
来看一下上面代码的执行结果:
程序正常输入
当我进行第一轮次输入时:
s=’abcd\n\r’
k=’5\r’
ss=’\n’
此时控制台输入第一个5的那行还有一个‘\n’没有被读取
当我进行第二轮次输入时:
s=’abc\n\r’
k=”5\r
ss=’\n’
…
此时程序运行正常
例3:当我们在控制台进行输入输出容易抛出java.lang.numberformatexception: For input string: “”错误
import java.util.Scanner;
/**
* Created by Administrator on 2017/8/31.
*/
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()) {
int k=integer.parseInt(sc.nextLine());
String s=sc.nextLine();
int k1=sc.nextInt();
System.out.println(k);
System.out.println(s);
System.out.println(k1);
}
}
}
来看一下上面代码的执行结果:
当我输入第二轮次的5时程序抛错
这是因为当我首次进行第二轮次输入时sc.nextLine()读到的是第一轮次k1未读到的‘\n’,实际是‘’,而‘’是不能够转换为整数的包装类型的所以出错。
如果在代码末尾追加sc.r=nextline(), 把’\n’吃掉,程序运行正常。
相关阅读
JavaScript 数组详解 1.认识数组 1)、内置对象是JS语言自带的对象,提供了一些基本的功能提供开发者使用。常用的内置
方法重载:为了使方法名相同但是形参不同的构造器同时存在,并在编译时可以由编译器根据形参的类型个数等自动确定调用哪个函数。 区
因为最近要写一个批量改东西的脚本,覆盖到一年的,这里当做是代码备份吧~~ public static void main(String[] args) { i
游戏开发很重要的一点就是系统的并发性能,体现在单位时间内处理的请求数,还有同时连接的最大用户数。 基于Java语言实现的Netty不仅
/** 设置指定键对值的系统属性* setProperty (String prop, String value);* * 参数:* prop - 系统属性的名称。* value - 系统属