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
相关产品推荐
相关产品推荐

