java中接收控制台输入的三种方式

 2024-03-13 03:05:15  阅读 0

第一个输入/输出

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.Scanner; 
  
   // System.in和System.out方法
   //缺点一: 该方法能获取从键盘输入的字符,但只能针对一个字符的获取
   //缺点二: 获取的只是char类型的。如果想获得int,float等类型的输入,比较麻烦。
  public static void CharTest(){ 
    try{
      System.out.print("Enter a Char:");
      char i = (char)System.in.read();
      System.out.println("Yout Enter Char is:" + i);
    }
    catch(IOException e){
      e.printStackTrace();
    }    
  }

是属于java.lang包的类,代表系统类

定义如下:

public final class System extends Object//此类为最终类,不能被继承。

它有以下两个重要的成员变量:

(1)in:是输入流对象。 它的来源是键盘。 它可以读取用户从键盘输入的数据。 读取数据时,会造成拥塞,直到用户按下回车键。 阅读方法:

public int read(char c[],int off,int len)和public int read(char c[])。

(2)out:是一个输出流对象,其目的地是命令行窗口,写法:

public void write(char c[],int off,int len)和public void write(char c[])

in 和 out 是类的属性:

(1)final in //静态方法,直接用类名调用,返回的是类,表示可以实例化。 .in是类型,字节流,程序可以用它来读取键盘输入的数据。 “标准”输入流。 该流已打开并准备好提供输入数据。 通常,该流对应于键盘输入或主机环境或用户指定的另一个输入源。

(2)final out //静态方法,直接用类名调用,返回的是类,也就是说可以实例化。 .out是类型(是子类),字节流,程序可以用它来输出数据到显示器上。 “标准”输出流。 该流已打开并准备好接受输出数据。 通常,该流对应于监视器输出或主机环境或用户指定的另一个输出目的地。

其实JAVA也对IO提供了一定的支持。 .in、.out、.err这三个流也是常见的数据源和数据流目的地。 最常用的方法可能是在控制台程序中使用 .out 将输出打印到控制台。 这三个流是在 JVM 启动时由 Java 运行时初始化的,因此您不需要初始化它们(尽管您可以在运行时替换它们)。

第二次更换系统流程

虽然.in和.out这两个流是java.lang的静态成员。 class(这两个变量是final常量)并且在JVM启动时已经提前初始化了,你仍然可以改变它们。

只需对 .in 进行新设置或对 .out 进行新设置,所有后续数据都将在新流中读取和写入。

可以使用.setIn()、.()方法设置一个新的系统流(这两个方法是静态方法,内部调用本地方法来重置系统流)。 记住,一定要在JVM关闭之前刷新.out(调用flush()),以确保.out将数据输出到文件中。

 // InputStreamReader和BufferedReader方法
   // 优点: 可以获取键盘输入的字符串
   // 缺点: 如何要获取的是int,float等类型的仍然需要转换
  public static void ReadTest(){
    System.out.println("ReadTest, Please Enter Data:");
    InputStreamReader is = new InputStreamReader(System.in); //new构造InputStreamReader对象
    BufferedReader br = new BufferedReader(is); //拿构造的方法传到BufferedReader中,此时获取到的就是整个缓存流
    try{ //该方法中有个IOExcepiton需要捕获
      String name = br.readLine();
      System.out.println("ReadTest Output:" + name);
    }
    catch(IOException e){
      e.printStackTrace();
    }    
  }

:是字节流和字符流之间的桥梁。 它可以将字节流输出为字符流,并且可以为字节流指定字符集。 如果不指定,将使用底层操作系统的默认编码方法。 可以一一输出。 封装在内部的字符以一种更高级别的方式一次读取一个字符。

:比高效读取字符、数组、行更高级。

java.io下有两个抽象类: 和 ,分别代表字节流和字符流。 它们是表示字节输入流的所有类的超类。 它们提供字节流的读取而不是文本读取。 ,这是与类的根本区别。

是一个用于读取字符流的抽象类。 通常每个读取请求都会导致对底层字符或字节流的相应读取请求。 如果没有缓冲,每次调用 read() 或 () 都会导致从文件中读取字节,将它们转换为字符并返回它们,效率极低。 即读出的是char数组,或者读出的是byte数组。

那为什么他们需要互相合作呢? 因为是字节输出(汉字会被分成两个字节),但是它的“包装”(整行读取),效率更高,所以最好一起使用。 流缓存可以以流的形式进行,然后通过方法获取缓存的内容。

第三种

  //Scanner类中的方法
   //优点一: 可以获取键盘输入的字符串
   //优点二: 有现成的获取int,float等类型数据,非常强大,也非常方便;
  public static void ScannerTest(){
    Scanner sc = new Scanner(System.in);
    System.out.println("ScannerTest, Please Enter Name:");
    String name = sc.nextLine();  //读取字符串型输入
    System.out.println("ScannerTest, Please Enter Age:");
    int age = sc.nextInt();    //读取整型输入
    System.out.println("ScannerTest, Please Enter Salary:");
    float salary = sc.nextFloat(); //读取float型输入
    System.out.println("Your Information is as below:");
    System.out.println("Name:" + name +"\n" + "Age:"+age + "\n"+"Salary:"+salary);
  }

它是Java5的新特性,主要功能是简化文本扫描。 “扫描仪”的中文意思是从一个地方扫描一份数据,然后在另一个地方显示出来。 一个简单的文本扫描器,可以使用正则表达式解析基本类型和字符串。

使用分隔符模式将其输入分解为标记,默认情况下匹配空格。 然后可以使用不同的 next 方法将生成的令牌转换为不同类型的值。 通过new(.in)创建时,控制台会等待输入,直到按下回车键,然后将输入的内容作为扫描对象传递。 并且该类有一个假设,它将在输入结束时抛出,该类将吞掉这个异常。

有人常说,之所以使用它,是因为它好用。 不如说构造函数支持多种方法,构造的对象也很方便。 你可以直接从字符串()、输入流、文件等构造对象。一旦拥有它们,你就可以逐段扫描整个文本(根据常规分隔符)并对扫描结果进行所需的处理。

就像带有光标或指针的扫描仪一样,调用它的 () 就像向前探索光标直到遇到换行符。 如果过程中遇到字符串对象,则返回 true 并重置光标。 调用它的()方法实际上意味着光标向前探索,直到遇到换行符。 此时并不重置,而是光标直接定位到目标数据的下一行,并返回探索过程中检测到的数据,包括空格。

java中常用的next()和()方法的区别

下一个():

1. 必须读取有效字符后才能完成输入。

2. next()方法会自动去除输入有效字符之前遇到的空格。

3. 只有输入有效字符后,其后输入的空格才会用作分隔符或终止符。

next() 无法获取带空格的字符串。

():

1、以Enter作为结束字符,也就是说()方法返回输入回车之前的所有字符。

2.可以获得空白空间。 java.io.;

标签: 字符 读取 字节

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码