java学习基础2024/3/11

本文详细介绍了在Java中使用Scanner和BufferedReader类从用户获取输入的方法,包括整数、字符串、浮点数等不同类型,并强调了资源管理的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、java中输入

在 Java 中,有多种方式可以从用户获取输入。下面是几种常见的方法:

使用 Scanner 类获取输入

import java.util.Scanner;

public class InputExample {
    public static void main(String[] args) {
        // 创建 Scanner 对象
        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入一个整数:");
        int number = scanner.nextInt();
        System.out.println("您输入的整数是:" + number);

        System.out.println("请输入一个字符串:");
        String str = scanner.next();
        System.out.println("您输入的字符串是:" + str);

        // 关闭 Scanner 对象
        scanner.close();
    }
}

在上面的示例中,我们首先导入了 java.util.Scanner 类。然后创建了一个 Scanner 对象,并传入 System.in,以便从控制台读取输入。Scanner 类有许多方法可以获取不同类型的输入,比如 nextInt() 获取整数,next() 获取字符串等。

在 Java 中,要创建一个 Scanner 对象来从控制台或其他输入流中读取数据,你需要首先导入 java.util.Scanner 包,并使用 new Scanner(System.in) 来创建一个 Scanner 对象。然后,在程序结束时,你应该调用 scanner.close() 来关闭 Scanner 对象以释放资源。

import java.util.Scanner;

public class ScannerExample {
    public static void main(String[] args) {
        // 创建 Scanner 对象
        Scanner scanner = new Scanner(System.in);

        // 读取输入
        System.out.print("请输入您的姓名:");
        String name = scanner.nextLine();
        System.out.println("您输入的姓名是:" + name);

        // 读取另一个输入
        System.out.print("请输入您的年龄:");
        int age = scanner.nextInt();
        System.out.println("您输入的年龄是:" + age);

        // 关闭 Scanner 对象
        scanner.close();
    }
}

在这个例子中,我们首先创建了一个 Scanner 对象 scanner,然后使用它读取用户输入的姓名和年龄。最后,我们在程序结束时调用 scanner.close() 来关闭 Scanner 对象。

请注意,在使用 Scanner 时,如果不关闭它,可能会导致资源泄漏或其他不良影响。因此,在程序结束时或 Scanner 对象不再需要时,请务必调用 close() 方法关闭它。

Scanner 类有许多方法可以获取不同类型的输入

java.util.Scanner 类提供了许多方法,可以用来获取不同类型的输入。以下是一些常用的方法及其功能说明:

1. nextInt()
  • 功能:获取下一个输入项作为整数。
  • 用法int num = scanner.nextInt();
2. nextLong()
  • 功能:获取下一个输入项作为长整数。
  • 用法long num = scanner.nextLong();
3. nextFloat()
  • 功能:获取下一个输入项作为单精度浮点数。
  • 用法float num = scanner.nextFloat();
4. nextDouble()
  • 功能:获取下一个输入项作为双精度浮点数。
  • 用法double num = scanner.nextDouble();
5. next()
  • 功能:获取下一个输入项作为字符串,遇到空格或换行符结束。
  • 用法String str = scanner.next();
6. nextLine()
  • 功能:获取一行输入作为字符串,包括空格和换行符。
  • 用法String line = scanner.nextLine();
7. nextBoolean()
  • 功能:获取下一个输入项作为布尔值("true" 或 "false")。
  • 用法boolean bool = scanner.nextBoolean();
8. nextByte()
  • 功能:获取下一个输入项作为字节。
  • 用法byte b = scanner.nextByte();
9. nextShort()
  • 功能:获取下一个输入项作为短整数。
  • 用法short s = scanner.nextShort();
10. nextBigDecimal()
  • 功能:获取下一个输入项作为 BigDecimal 对象。
  • 用法BigDecimal bigDecimal = scanner.nextBigDecimal();
11. nextBigInteger()
  • 功能:获取下一个输入项作为 BigInteger 对象。
  • 用法BigInteger bigInteger = scanner.nextBigInteger();
12. hasNext()
  • 功能:检查是否还有下一个输入项(用于循环读取)。
  • 用法boolean hasInput = scanner.hasNext();
13. hasNextLine()
  • 功能:检查是否还有下一行输入。
  • 用法boolean hasLine = scanner.hasNextLine();
  • import java.util.Scanner;
    
    public class ScannerExample {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
    
            System.out.println("请输入一个整数:");
            int num = scanner.nextInt();
            System.out.println("您输入的整数是:" + num);
    
            System.out.println("请输入一个浮点数:");
            double dbl = scanner.nextDouble();
            System.out.println("您输入的浮点数是:" + dbl);
    
            System.out.println("请输入一个字符串:");
            String str = scanner.next();
            System.out.println("您输入的字符串是:" + str);
    
            scanner.close();
        }
    }
    

使用 BufferedReader 类获取输入

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class InputExample {
    public static void main(String[] args) throws IOException {
        // 创建 BufferedReader 对象
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        System.out.println("请输入一个整数:");
        int number = Integer.parseInt(reader.readLine());
        System.out.println("您输入的整数是:" + number);

        System.out.println("请输入一个字符串:");
        String str = reader.readLine();
        System.out.println("您输入的字符串是:" + str);

        // 关闭 BufferedReader 对象
        reader.close();
    }
}

这个示例中,我们使用 java.io.BufferedReader 类读取输入。我们首先创建了一个 BufferedReader 对象,然后使用 readLine() 方法逐行读取输入。由于 readLine() 返回的是字符串,如果需要将其转换为其他类型,需要使用 Integer.parseInt() 等方法。

在 Java 中,可以使用 java.io.BufferedReader 类从标准输入流(例如控制台输入)中读取输入。BufferedReader 类提供了比 Scanner 类更灵活和高效的方式来处理输入,尤其是在需要读取一整行输入的情况下。以下是一个简单的示例:

导入包

首先需要导入必要的包:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

创建 BufferedReader 对象

接下来,我们创建一个 BufferedReader 对象,并将 System.in 作为输入流传递给它:

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

读取输入

现在可以使用 BufferedReader 对象的 readLine() 方法来读取输入的一行。readLine() 方法会返回一个字符串,直到用户输入回车为止。

try {
    System.out.println("请输入您的姓名:");
    String name = reader.readLine();
    System.out.println("您输入的姓名是:" + name);

    System.out.println("请输入您的年龄:");
    int age = Integer.parseInt(reader.readLine());
    System.out.println("您输入的年龄是:" + age);
} catch (IOException e) {
    e.printStackTrace();
} catch (NumberFormatException e) {
    System.out.println("年龄应该是一个整数,请重新输入。");
}

关闭 BufferedReader 对象

最后,当我们不再需要从输入流中读取数据时,应该关闭 BufferedReader 对象以释放资源:

try {
    reader.close();
} catch (IOException e) {
    e.printStackTrace();
}

完整示例

这里是一个完整的示例,演示了如何使用 BufferedReader 类从控制台读取用户输入的姓名和年龄:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class BufferedReaderExample {
    public static void main(String[] args) {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        try {
            System.out.println("请输入您的姓名:");
            String name = reader.readLine();
            System.out.println("您输入的姓名是:" + name);

            System.out.println("请输入您的年龄:");
            int age = Integer.parseInt(reader.readLine());
            System.out.println("您输入的年龄是:" + age);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (NumberFormatException e) {
            System.out.println("年龄应该是一个整数,请重新输入。");
        } finally {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

在这个示例中,我们首先创建了一个 BufferedReader 对象 reader,然后使用 readLine() 方法读取用户输入的姓名和年龄。在读取整数时,我们使用 Integer.parseInt() 方法将字符串转换为整数。最后,在 finally 块中关闭 BufferedReader 对象,以确保资源被正确释放。

使用 BufferedReader 类可以更加灵活地处理输入,特别是在需要读取一整行输入或处理大量输入时。

那如果使用bufferedreader读取一行内有两个数据,如何读

如果一行输入中包含两个或多个数据,并且这些数据之间使用空格或其他分隔符分隔,你可以使用 String.split() 方法来将这一行拆分成多个部分,然后分别处理这些部分。这种方法在使用 BufferedReader 读取输入时非常常见。

以下是一个示例,演示了如何使用 BufferedReader 读取一行输入,并将其拆分为多个数据:

示例

假设我们的输入一行包含了两个整数,使用空格作为分隔符。我们要读取这一行,然后分别获取这两个整数。

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class BufferedReaderSplitExample {
    public static void main(String[] args) {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        try {
            System.out.println("请输入两个整数(用空格分隔):");
            String input = reader.readLine();

            // 使用 split 方法拆分输入
            String[] parts = input.split(" ");

            if (parts.length != 2) {
                System.out.println("输入格式不正确,请输入两个整数并用空格分隔。");
            } else {
                // 将字符串转换为整数
                int num1 = Integer.parseInt(parts[0]);
                int num2 = Integer.parseInt(parts[1]);

                System.out.println("您输入的第一个整数是:" + num1);
                System.out.println("您输入的第二个整数是:" + num2);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (NumberFormatException e) {
            System.out.println("输入不是整数,请重新输入。");
        } finally {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

解释

  1. 我们先使用 BufferedReader 读取一行输入,并将其存储在字符串 input 中。
  2. 然后,我们使用 input.split(" ") 方法来将输入字符串按空格拆分成一个字符串数组 parts
  3. 如果输入不符合预期,比如没有两个数据或者输入格式不正确,我们输出错误消息。
  4. 如果拆分后的 parts 数组长度为 2,我们就可以安全地将其中的两个字符串解析为整数,并进行后续操作。

bufferedreader读入的是字符串类型吗

是的,BufferedReaderreadLine() 方法会读取一行文本输入,并将其作为一个字符串返回。无论输入中包含什么内容(数字、字母、符号等),readLine() 都会将它们全部作为字符串来处理。

在上面的示例中,我们使用了 readLine() 方法来读取一行输入,并将其存储在 String 类型的变量 input 中。然后我们可以对这个字符串进行各种操作,比如使用 split() 方法来将其拆分成多个部分,然后再进行类型转换等操作。

如果输入的一行数据包含了数字、字母、空格或其他字符,readLine() 方法都会将其作为一个整体的字符串返回。

例如,下面是一个示例,读取输入的一行,然后直接输出这个字符串:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class BufferedReaderStringExample {
    public static void main(String[] args) {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        try {
            System.out.println("请输入一行文本:");
            String input = reader.readLine();
            System.out.println("您输入的字符串是:" + input);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

在这个示例中,无论用户输入了什么内容,readLine() 方法都会将其作为一个字符串读取,并将其存储在 input 变量中。然后我们将这个字符串直接输出,不做任何处理。

所以,BufferedReaderreadLine() 方法读取的是一行文本,返回的是一个字符串类型的数据。

那如何做转化

如果你从 BufferedReader 中读取了一个字符串,然后想要将它转换成其他类型(比如整数、浮点数等),你可以使用 Java 中提供的一些方法来完成转换。下面是一些常见的示例:

1. 字符串转换为整数(int

使用 Integer.parseInt() 方法将字符串转换为整数:

String str = "123";
int num = Integer.parseInt(str);

如果字符串不是一个合法的整数格式,将会抛出 NumberFormatException 异常。

2. 字符串转换为长整数(long

使用 Long.parseLong() 方法将字符串转换为长整数:

String str = "1234567890";
long num = Long.parseLong(str);
3. 字符串转换为浮点数(float

使用 Float.parseFloat() 方法将字符串转换为浮点数:

String str = "3.14";
float num = Float.parseFloat(str);
4. 字符串转换为双精度浮点数(double

使用 Double.parseDouble() 方法将字符串转换为双精度浮点数:

String str = "3.1415926";
double num = Double.parseDouble(str);

5. 字符串转换为布尔值(boolean

使用 Boolean.parseBoolean() 方法将字符串转换为布尔值:

String str = "true";
boolean flag = Boolean.parseBoolean(str);

注意:对于布尔值的字符串转换,只有当字符串是 "true"(不区分大小写)时,才会返回 true;其他情况都会返回 false

完整示例

下面是一个示例程序,演示了从用户输入中读取一行字符串,然后将其转换为整数、浮点数和布尔值:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class BufferedReaderConvertExample {
    public static void main(String[] args) {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        try {
            System.out.println("请输入一个整数:");
            String intStr = reader.readLine();
            int num = Integer.parseInt(intStr);
            System.out.println("转换为整数后:" + num);

            System.out.println("请输入一个浮点数:");
            String floatStr = reader.readLine();
            float floatNum = Float.parseFloat(floatStr);
            System.out.println("转换为浮点数后:" + floatNum);

            System.out.println("请输入一个布尔值(true/false):");
            String boolStr = reader.readLine();
            boolean boolValue = Boolean.parseBoolean(boolStr);
            System.out.println("转换为布尔值后:" + boolValue);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (NumberFormatException e) {
            System.out.println("输入的格式不正确,请重新输入。");
        } finally {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

在这个示例中,我们首先从用户输入中读取一行字符串。然后分别将这个字符串转换为整数、浮点数和布尔值,并输出转换后的结果。

请注意,在使用这些转换方法时,要确保输入的字符串格式与你期望的转换类型相匹配,否则可能会抛出相应的异常。

这些字符串转换方法属于 Java 的基本数据类型的包装类中,通常是 java.lang 包中的类。具体来说,这些转换方法是属于以下几个包装类的静态方法

使用 Console 类获取输入(适用于控制台输入)

如果你的 Java 程序是在命令行或控制台中运行,还可以使用 java.io.Console 类来获取输入。

import java.io.Console;

public class InputExample {
    public static void main(String[] args) {
        Console console = System.console();
        if (console == null) {
            System.out.println("无法获取控制台对象");
            System.exit(1);
        }

        String name = console.readLine("请输入您的姓名:");
        System.out.println("您输入的姓名是:" + name);

        char[] password = console.readPassword("请输入密码:");
        System.out.println("您输入的密码是:" + new String(password));

        // 注意:不要忘记清除密码,以便不留在内存中
        java.util.Arrays.fill(password, ' ');
    }
}

请注意,使用 Console 类读取密码时,密码不会回显在控制台上,这有助于保护用户的隐私。

注意事项

  • 无论使用哪种方式获取输入,在结束使用后都应该关闭对应的输入流,以释放资源并防止内存泄漏。
  • 当从用户获取输入时,应该做好异常处理,因为用户输入可能会导致异常,比如输入的数据类型与期望的不符等。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_59037435

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值