使用Substring时出错:字符串索引超出范围:-1 * Java *

时间:2014-05-01 21:19:55

标签: java

在这个程序中,我只是从文件中获取输入并尝试从中获取男孩名称和女孩名称,并将它们放在单独的文件中。正如书中所述,我已经做了一切。而且我也在网上到处寻找帮助,但似乎找不到任何有同样问题的人。我已经看到了问题,其中它不是-1而是一个正数,因为它们远远超出字符串,调用字符串长度的子字符串。但似乎无法弄清楚这给我-1,因为我的价值是1.

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;
import java.util.ArrayList;


public class Homework_11_1 {

public static void main(String[] args)throws FileNotFoundException 
{
   File inputFile = new File("babynames.txt");
   Scanner in = new Scanner(inputFile);
   PrintWriter outBoys = new PrintWriter("boys.txt");
   PrintWriter outGirls = new PrintWriter("girls.txt");


   while (in.hasNextLine()){
    String line = in.nextLine();
    int i = 0;
    int b = 0;
    int g = 0;
    while(!Character.isWhitespace(line.charAt(i))){ i++; }
    while(Character.isLetter(line.charAt(b))){ b++; }
    while(Character.isLetter(line.charAt(g))){ g++; }
    String rank = line.substring(i);
    String boysNames = line.substring(i, b);
    String girlsNames = line.substring(b, g);
    outBoys.println(boysNames);
    outGirls.println(girlsNames);
    }

    in.close();
    outBoys.close();
    outGirls.close();
    System.out.println("Done");
}


}

这是txt文件

    1 Jacob Sophia
    2 Mason Emma
    3 Ethan Isabella
    4 Noah Olivia
    5 William Ava
    6 Liam Emily
    7 Jayden Abigail
    8 Michael Mia
    9 Alexander Madison
    10 Aiden Elizabeth

2 个答案:

答案 0 :(得分:1)

我会用另一种方式写它,使用split。

public static void main(String[] args)throws FileNotFoundException 
    {
       File inputFile = new File("babynames.txt");
       Scanner in = new Scanner(inputFile);
       PrintWriter outBoys = new PrintWriter("boys.txt");
       PrintWriter outGirls = new PrintWriter("girls.txt");


       while (in.hasNextLine()){
        String line = in.nextLine();
        String[] names = line.split(" "); // wile give you [nbr][boyName][GirlName]

        String boysNames = names[1];
        String girlsNames = names[2];
        outBoys.println(boysNames);
        outGirls.println(girlsNames);
        }

        in.close();
        outBoys.close();
        outGirls.close();
        System.out.println("Done");
    }

答案 1 :(得分:0)

我只使用substring()而不是对循环和String.split(" ")大惊小怪。当然,作业可能不允许你这样做。

但无论如何,如果没有给你答案,我可以告诉你,你的逻辑错了。走过它,找出原因。如果您尝试仅在输入文件的第一行运行此代码,您将获得以下值:i = 1,b = 0和g = 0。调用line.substring(1,0)显然不起作用。