无名 发表于 2022-5-8 18:34:44

【技术交流】解决Java键盘扫描通回车BUG


最近才发现

当你调用Java底层方法Scanner

如:Scanner sn = new Scanner(System.in);

键盘扫描器

sn.Next();

Next返回类型为字符串,该方法一定要读取到有效字符才能返回
sn.NextLine();
NextLIne,返回由输入设备输入的字符,返回类型为字符串,该方法由用户按下回车键结束输入方法

当出现在同一个事件中,就会出现【通回车现象】
http://cdn.u1.huluxia.com/g3/M03/61/43/wKgBOV3hMi-ABltoAAFCYsbVIPA056.jpg
当在控制台中输入

121212【每个12中带一个空格】

那么结果为
http://cdn.u1.huluxia.com/g3/M03/61/43/wKgBOV3hMjKALo2MAAKGdYcthw0995.jpg
sn.Next(); 遇到空格,就会停止扫描。
所以只会打印一个【12】

但是我只输入了一次却有两个结果被打印[心碎]
这就是问题所在

sn.Next();跟sn.NextLine();都把回车键认为成它的执行条件了

但是为啥sn.NextLine();只打印了【1212】
是因为: sn.NextLine();会直接跟着sn.Next();读取后再读取数据

如过扫描到:123
那么sn.Next();为:【1】
sn.NextLine();为:【23】[滑稽]

为了解决这个小BUG
当然也很简单
http://cdn.u1.huluxia.com/g3/M03/61/43/wKgBOV3hMjWAUd8LAAHaJ-FPs4Y254.jpg
再多加一条sn.NextLine();
让前面两条语句通回车

第三条扫描语句就不会通回车了[滑稽]
http://cdn.u1.huluxia.com/g3/M03/61/43/wKgBOV3hMjiAF7GkAAHwnynbaKo076.jpg
页: [1]
查看完整版本: 【技术交流】解决Java键盘扫描通回车BUG