You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java播放列表添加歌曲时,含空格歌名被错误拆分的问题咨询

问题解决:读取带空格的歌曲名时内容串位的修复

问题原因

你用的keyboard.next()方法会把空格、换行这类空白字符当成分隔符,读取到第一个空格就停止。所以输入"one two"时,name只拿到"one",剩下的"two"直接被后续的artist = keyboard.next()读取,导致串位。

修复方案

把读取字符串的next()换成nextLine(),它能读取整行输入(直到换行符),但要注意处理nextInt()和nextDouble()之后残留的换行符——这类方法不会读取换行符,会留在输入缓冲区里,直接调用nextLine()会读到空字符串。

修改后的代码

System.out.println("Enter song name: ");
name = keyboard.nextLine();

System.out.println("Enter song artist: ");
artist = keyboard.nextLine();

System.out.println("Enter song runtime: ");
runtime = keyboard.nextInt();

if (runtime <= 0) {
    System.out.println("Invalid input, try again.");
    break;
}

// 消费nextInt()留下的换行符
keyboard.nextLine();

System.out.println("Enter song price: ");
price = keyboard.nextDouble();

if (price <= 0) {
    System.out.println("Invalid input, try again.");
    break;
}

// 消费nextDouble()留下的换行符
keyboard.nextLine();

newSong = new SongMoretti(name, artist, runtime, price);

ok = thePlaylist.addToPlayist(newSong);

if (ok)
    System.out.println("Song added");
else 
    System.out.println("Song not added");
break;

补充说明

  • nextLine()会读取从当前光标位置到换行符的所有内容,包括空格,正好满足带空格的歌曲名、歌手名输入需求。
  • 每次调用nextInt()、nextDouble()这类方法后,必须用keyboard.nextLine()清空缓冲区里的换行符,避免影响后续的nextLine()读取逻辑。

内容的提问来源于stack exchange,提问作者jeremslol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 19:52:36