Я пишу программу для управления некоторыми данными в текстовом файле. Я должен взять удостоверение личности штата, численность населения, посещаемость школы и бедность из файла, который содержит больше информации, чем эти 4, и записать их в новый текстовый файл. Затем используйте этот новый текстовый файл для выполнения некоторых математических расчетов.
Это исходная структура текстового файла:
Я столкнулся с ошибками в своем коде и был бы признателен за помощь. Чтобы быть конкретным, ошибки являются индексом за пределами, и нестатический метод не может ссылаться на этот контекст.
Класс для определения данных для извлечения:
Класс, в котором происходит фактическое извлечение:
public PopulationData (String stateId, String totPopulation, String
schoolGoingPopuplation, String povertPopulation)
{
this.stateId = stateId;
this.totPopulation = totPopulation;
this.schoolGoingPopuplation = schoolGoingPopuplation;
this.povertPopulation = povertPopulation;
}
public String getState()
{
return stateId;
}
public String getPopulation()
{
return totPopulation;
}
public String getSchool()
{
return schoolGoingPopuplation;
}
public String getPoverty()
{
return povertPopulation;
}
public String toString()
{
return this.stateId + " " + this.totPopulation + " " +
this.schoolGoingPopuplation + " " + this.povertPopulation;
}
// это основной класс
inFile = new InputStreamReader(new FileInputStream(inFileName));
OutputStreamWriter outFile = new OutputStreamWriter(new FileOutputStream(outFileName));
while(scanner.hasNext()) {
String line = scanner.nextLine();
String[] columns = line.split(" ");
String sateId = columns[0];
String totPopulation = columns[9];
String schoolGoingPopuplation = columns[10]; //index out of bounds occured
String povertPopulation = columns[11]; //index out of bounds occured
PopulationData pd = new PopulationData(sateId, totPopulation, schoolGoingPopuplation, povertPopulation);
data.add(pd);
outFile.write(pd.toString());
}
for(PopulationData pd : data){
System.out.println(pd.toString());
}
}
catch(IOException except)
{
except.printStackTrace();
}
}
Как лучше всего получить эту информацию по индексу и записать ее в файл?




Строка 28,30,32: действительно ли поля в файле разделены символом табуляции и ровно одним символом табуляции? Не похоже. Я предполагаю, что он использует пробелы, и ваш разбиение создает массив ровно из одного столбца, который представляет собой всю строку. Учитывая, что у вас есть экземпляр сканера, вы, вероятно, собирались использовать его для чтения полей с помощью методов .nextInt() и .next().
Строка 37: метод .add() возвращает логическое значение, которое вы пытаетесь записать в поток. Вы, наверное, хотели написать outfile.write(pd.toString())?
Строка 40: вы, вероятно, имеете в виду System.out.println(pd.toString()), у вас фактически есть PopulationDataManipulation.toString(), который не работает, потому что это метод экземпляра, а ваш main статичен.
Спасибо за вашу помощь. Проблема с писателем и печатью решена. Единственное, что я выясняю, это индексация. Что я пытаюсь сделать с этим, так это разбить каждую строку на массив, чтобы я мог записать только ту информацию, которую я хочу, в новый файл файла. Затем я воспользуюсь этим новым файлом для расчета процента.
Разделение не работает, потому что вы пытаетесь разделить строку, разделенную пробелами, с помощью символа табуляции. «01 00180 Auburn School District» .split («\ t») создает массив из одного элемента [«01 00180 Auburn School District»]. Вы можете сделать это с помощью своего сканера, например: int col1 = scanner.nextInt (); int col2 = scanner.nextInt (); или вы можете использовать тот факт, что есть столбцы фиксированной ширины и захватить их по подстроке, например: String name = line.substring (10, 80) .trim (); или вы можете сопоставить все это с регулярным выражением ex Pattern.compile ("\\ d + \\ d + ..."), но imho split здесь неправильный подход.
Большое спасибо Грегу за поддержку. Метод подстроки сработал.
Попробуйте вместо скриншотов поставить код. Также индекс массива означает, что вы обращаетесь к индексу, который выходит за пределы вашего размера массива, а нестатический означает, что вы пытаетесь получить доступ к методам, поскольку они статичны, но это не так, поэтому вам понадобится экземпляр класса для доступа к ним.