我到目前为止的代码:
import java.util.Scanner;
public class ExtractLine
{
public static void main (String[] args)
{
Scanner stdIn = new Scanner (System.in);
String songs =
"1. Bow Wow - Fresh Azimiz\n" +
"2. Weezer - Beverly Hills\n" +
"3. Dave Matthews Band - Crash Into Me\n" +
"4. Sheryl Crow - Leaving Las Vegas\n";
String songNum; //song number that is searched for
//int songIndex; //position of where song number is found
int eolIndex; //position of end of line character
String song; //the specified line
System.out.print ("Enter song number: ");
songNum = stdIn.nextLine();
eolIndex = songs.indexOf("\n");
int songIndex = songs.indexOf(songNum);
song = songs.substring(songIndex);
System.out.println("\n\n" + song + "\n\n");
}//end main
}//end class
需要发生的是用户必须输入一个数字1-4,然后输出将只是该行的歌曲,例如。用户输入:1,输出:1。Bow Wow - Fresh Azimiz。 (不是我的选择,这是教科书中的内容)。
我的问题,我可以让程序认识到它需要以我输入的任何数字开始,输出恰好包含所有内容,而不仅仅是行。
例如:输入:3
输出:3。戴夫马修斯乐队 - 撞到我(\ n) 4. Sheryl Crow - 离开拉斯维加斯
有关如何解决此问题的任何想法?谢谢!
答案 0 :(得分:1)
你调用的one-argument substring
method从开始位置到字符串结尾,这不是你想要的。
您需要找到 next \n
字符的索引。如果存在,则使用将提取正确子字符串的the two-argument substring
method。如果它不存在,那么您可以调用substring
,因为您已经调用它 - 将子字符串传递到字符串的末尾。
答案 1 :(得分:0)
您可能需要考虑使用集合来存储歌曲(例如HashMap)。这样,您可以直接从密钥访问该值,而无需担心访问子字符串。
以下是一种方法(注意,如果用户输入除整数外的任何内容,您将收到java.lang.NumberFormatException
,如果找不到该键,则会收到空对象) :
public static void main(String[] args) {
Scanner stdIn = new Scanner(System.in);
Map<Integer, String> songs = new HashMap<>();
songs.put(1, "Bow Wow - Fresh Azimiz");
songs.put(2, "Weezer - Beverly Hills");
songs.put(3, "Dave Matthews Band - Crash Into Me");
songs.put(4, "Sheryl Crow - Leaving Las Vegas");
Integer songNum;
System.out.print("Enter song number: ");
songNum = Integer.valueOf(stdIn.nextLine());
System.out.println("\n\n" + songs.get(songNum) + "\n\n");
stdIn.close();
}