李帅朋 2024-02-29 12:50 采纳率: 58.3%
浏览 5
已结题

Java中next()读取字符串问题

下面的代码是想要把输入的时间(hh:mm:ss)转换成秒,但在输入数据时有些问题

img


想要的结果是输入“11:05:18 15:14:23”后,会将两个时间均转换成秒,但实际执行时发现,输入“11:05:18 15:14:23”后,只读取了前半部分,后半部分不知道去哪了。

img


接着再输入“11:05:18 15:14:23”后,就是下面的结果

img

本以为是next()使用方法不对,但下面的代码读取结果是正确的:

img

img

想知道第一种代码,为什么没有把“11:05:18 15:14:23”分成两部分读取?

  • 写回答

4条回答 默认 最新

  • a5156520 2024-02-29 13:54
    关注

    下面是我的理解,供参考:

    根据参考链接,Scanner类的next()方法会读取直到换行之前的所有字符到缓冲区,然后再扫描缓冲区的字符,默认按照空格进行分隔读取字符串,后面每调用一次next()就将空格前的字符串保存到一个String对象中;

    如果一次性输入:11:05:18 15:14:23,它们在第一次调用getStartTime()都被读取到缓冲区,然后按照空格进行分隔读取第一个字符串"11:05:18"保存到String对象startTime中,第二个时间因为没有被读取就被忽略了,然后第二次调用getStartTime(),创建了新的Scanner对象,不会再从上一个Scanner对象的缓冲区读取数据,所以又需要输入一次时间;

    如果要将一行输入的两个时间分两次读取,可以在main()方法创建Scanner对象,然后传递给getStartTime()方法,让它们可以从同一个缓冲区读取数据即可。

    修改如下:

    参考链接:

    package testtime;
    
    import java.util.Scanner;
    
    public class Test {
    
        public static void main(String[] args) {
            
            Scanner scan = new Scanner(System.in);
            int startTime = getStartTime(scan);
            int startTime2 = getStartTime(scan);
    //        int startTime3 = getStartTime(scan);
    //        int startTime4 = getStartTime(scan);
    //        
            System.out.println(startTime);
            System.out.println(startTime2);
    //        System.out.println(startTime3);
    //        System.out.println(startTime4);
            
            scan.close();
        }
        
        // 给getStartTime()方法新增一个Scanner参数,以便可以从同一个缓冲区数据
        public static int getStartTime(Scanner scan) {
            
            // https://blog.csdn.net/cy973071263/article/details/88908810
            String startTime = scan.next();
            String[] split=startTime.split(":");
            
            int startHour = Integer.parseInt(split[0]);
            int startMinute = Integer.parseInt(split[1]);
            int startSecond = Integer.parseInt(split[2]);
            
            return startHour*3600+startMinute*60+startSecond;
            
        }
        
    }
    
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月8日
  • 已采纳回答 2月29日
  • 创建了问题 2月29日

悬赏问题

  • ¥15 c++2013读写oracle
  • ¥15 c++ gmssl sm2验签demo
  • ¥15 关于模的完全剩余系(关键词-数学方法)
  • ¥15 有没有人懂这个博图程序怎么写,还要跟SFB连接,真的不会,求帮助
  • ¥30 模拟电路 logisim
  • ¥15 PVE8.2.7无法成功使用a5000的vGPU,什么原因
  • ¥15 is not in the mmseg::model registry。报错,模型注册表找不到自定义模块。
  • ¥15 安装quartus II18.1时弹出此error,怎么解决?
  • ¥15 keil官网下载psn序列号在哪
  • ¥15 想用adb命令做一个通话软件,播放录音