โทเค็นและการประมวลผลบรรทัด Java

ฉันกำลังเขียนโปรแกรมที่อ่านข้อมูลจากไฟล์ข้อความพร้อมสถิติกีฬาบาสเก็ตบอลต่างๆ แต่ละบรรทัด (หลังสองบรรทัดส่วนหัว) สอดคล้องกับหนึ่งเกมและคะแนนของแต่ละทีม โดยมีสตริงอื่นๆ อยู่ในนั้น ฉันกำลังพยายามใช้เครื่องสแกนเพื่ออ่านคะแนน int ของแต่ละเกม เก็บไว้ในตัวแปร แล้วเปรียบเทียบเพื่อตัดสินว่าทีมใดชนะเกมนั้น เพื่อที่ฉันจะได้เพิ่มชัยชนะในภายหลังในโปรแกรม ฉันรู้วิธีอ่าน ints ทั้งหมดตามลำดับ แต่ฉันไม่สามารถหาวิธีอ่าน ints สองบรรทัดในบรรทัด เก็บเป็นตัวแปร เปรียบเทียบ แล้วไปยังบรรทัด/เกมถัดไป

นี่คือวิธีการที่เกี่ยวข้อง:

public static void numGamesHTWon(String fileName)throws FileNotFoundException{
    System.out.print("Number of games the home team won: ");
    File statsFile = new File(fileName);
    Scanner input1 = new Scanner(statsFile);
    String line = input1.nextLine();
    Scanner lineScan = new Scanner(line);
    input1.nextLine();
    input1.nextLine();

    while (input1.hasNext()) {
        if (input1.hasNextInt()) {
            int x = input1.nextInt();
            System.out.print(x);   
            input1.next();
        } else {
            input1.next();
        }
    }

สองสามบรรทัดจากไฟล์ข้อความ:

บาสเกตบอลหญิง NCAA

2011 - 2012

2007-11-11 ข้าว 63 @Winthrop 54 O1
2007-11-11 @S Dakota St 93 UC Riverside 90 O2
2007-11-11 @Texas 92 Missouri St 55
2007-11-11 เทนเนสซี 76 ชัตตานูกา 56
2007-11-11 Mississippi St 76 Centenary 57
2007-11-11 ETSU 75 Delaware St 72 O1 พรีซีซั่น NIT


person Hector    schedule 23.10.2015    source แหล่งที่มา


คำตอบ (1)


อ่านไฟล์ทีละบรรทัด จากนั้นแยกบรรทัดออกเป็น String[] เนื่องจากคุณทราบว่าคะแนนอยู่ที่ใดในแต่ละบรรทัด คุณจึงสามารถแยกวิเคราะห์ค่าเหล่านั้นจากอาร์เรย์และเปรียบเทียบได้อย่างง่ายดาย คุณช่วยแบ่งปันสองสามบรรทัดจากข้อมูลของคุณได้ไหม? แล้วฉันจะสามารถแสดงรหัสที่แน่นอนให้คุณดูได้

คุณสามารถลองบางอย่างเช่น

String[] parts = str.split("\\D+");

โดยที่ str คือบรรทัดที่คุณเพิ่งอ่าน ตอนนี้อาร์เรย์ชิ้นส่วนจะมีตัวเลขทั้งหมดในสตริงของคุณ เพียงแค่อ่านอาร์เรย์ แยกวิเคราะห์เป็น int แล้วทำการเปรียบเทียบ โปรดทราบว่าสามรายการแรกในอาร์เรย์นี้จะตรงกับวันที่ ดังนั้นไม่ต้องสนใจข้อมูลเหล่านั้น

ตัวอย่างเช่น

String[] parts = "2007-11-11 Mississippi St 76 Centenary 57".split("\\D+");

for (String g: parts)

        System.out.println(g);

พิมพ์ออกมา

2007
11
11
76
57

ตอนนี้คุณสามารถนำสองค่าสุดท้ายมาเปรียบเทียบได้

 while (input1.hasNextLine()) {
            String line = input1.nextLine();

             String[] parts = line .split("\\D+");

             int score1 = Integer.parseInt(parts[parts.length-2]);

             int score2 = Integer.parseInt(parts[parts.length-1]);

             /*now compare score1 and score2 and do whatever...*/
        }
person AbtPst    schedule 23.10.2015
comment
ฉันไม่ควรใช้อาร์เรย์หรือการแยกวิเคราะห์ เพียงใช้สแกนเนอร์เพื่ออ่านไฟล์ บรรทัด และโทเค็น - person Hector; 23.10.2015
comment
นอกจากวันที่แล้ว คุณแน่ใจหรือว่าคุณจะได้รับ ints เพียงสองบรรทัดเท่านั้น? - person AbtPst; 23.10.2015
comment
วันที่ไม่นับเป็น int คะแนนทั้งสองเป็น และ O2 และ O1 ที่ปรากฏไม่อ่านเป็น ints เนื่องจากเริ่มต้นด้วย O ดังนั้นวิธีที่ฉันมี มันแค่พิมพ์คะแนนทั้งหมดใน ลำดับ. ควรมีเพียงสองคะแนนต่อบรรทัด - person Hector; 23.10.2015
comment
โปรดดูการแก้ไขล่าสุด ลองเรียกใช้โค้ดและดูว่าใช้งานได้หรือไม่ - person AbtPst; 23.10.2015