如何使用indexOf()在Java中提取一行

时间:2013-09-23 20:50:56

标签: java extract indexof

我到目前为止的代码:

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 - 离开拉斯维加斯

有关如何解决此问题的任何想法?谢谢!

2 个答案:

答案 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();
}