我编写了一个接受char和字符串的代码:
public static void main(String[] args) throws IOException {
System.out.println("enter one char");
char c = (char) System.in.read();
System.out.println("The char entered is :" + c);
String userInput;
System.out.println("Enter a string");
Scanner s = new Scanner(System.in);
userInput = s.next();
System.out.println("the string inputted is:" + userInput);}
输出:
enter one char
asdfg
The char entered is :a
Enter a string
the string inputted is:sdfg
任何人都可以解释为什么会这样吗?
答案 0 :(得分:3)
如Tim Biegeleisen所述,<a href="" ng-click="addFavorite(myfav.id);favorite=!favorite">
<i class="fa orange" ng-class="{'fa-star': favorite || fav==myfav.id, 'fa-star-o': !favorite}"></i>
返回一个InputStream。扫描仪也可以在InputStream上运行。 InputStream的System.in()
方法使用流中的第一个字节,您将其转换为char(这是有效的,因为它需要一个字节来存储char,因此您可以在不截断的类型之间进行转换)。 / p>
让我们分解。
read()
https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#in
&#34;标准&#34;输入流。此流已打开并准备好提供输入数据。通常,此流对应于键盘输入或主机环境或用户指定的其他输入源。
InputStream&#39; s System.in()
https://docs.oracle.com/javase/8/docs/api/java/io/InputStream.html#read--
从输入流中读取下一个数据字节。值字节作为int返回,范围为0到255 ...
扫描仪 https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html
扫描程序使用分隔符模式将其输入分解为标记,分隔符模式默认匹配空格。然后可以使用各种下一种方法将得到的标记转换为不同类型的值。
扫描仪的read()
https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html#next--
查找并返回此扫描仪的下一个完整令牌。完整的标记之前和之后是与分隔符模式匹配的输入...
next()
将读取/消耗静态InputStream的第一个字节。从同一个InputStream实例化System.in().read()
,然后调用new Scanner
会消耗剩余的令牌。
我建议您浏览一下您无法理解的任何类或方法的Java API文档。将事物分解为单独的类型并检查它们的构造函数和方法描述。
答案 1 :(得分:2)
System.in:一个InputStream,通常连接到控制台程序的键盘输入。它只不过是一个链接到System类的操作系统。使用System类,我们可以将从Keyboard到CPU的instream转移到我们的程序中。这就是用Java实现键盘读取的方式。
答案 2 :(得分:0)
System是java.lang包中的最后一个类。
read()方法 - &gt;从输入流中读取一些字节数并将它们存储到缓冲区数组b中。实际读取的字节数以整数形式返回。此方法将阻塞,直到输入数据可用,检测到文件结尾或抛出异常。
System.in是一个InputStream,通常连接到控制台程序的键盘输入。由于数据通常通过命令行参数或配置文件传递给命令行Java应用程序,因此不经常使用System.in。