Программа для нахождения слов с заданными окончаниями.
По отдельности методы работают, но если я пытаюсь из метода readAndSend() передать строку в foundIndex(String read), то выдает ошибку
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
С чем это связано?
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class JavaApplication31
{
public static void main(String[] args) throws java.lang.Exception
{
Reader r = new Reader();
r.wordAppend();
r.wordEnd();
// r.readAndSend();
String readMe = "р ых. ых, ах sах gых укусила ах ыыыыыы ых ";
r.foundIndex(readMe);
System.out.println("");
}
}
class Reader
{
String allText = "";
void readAndSend() throws IOException
{
Reader rr = new Reader();
String fragment = "";
int sum = 0;
try {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("R.txt"), "Cp1251"));
int ch;
for (;;) {
ch = br.read();
if (ch == -1) {
break;
}
allText += String.valueOf((char) ch);
fragment += String.valueOf((char) ch);
sum++;
if (sum % 1000 == 0) {
rr.foundIndex("р ых. ых, ах sах gых укусила ах ыыыыыы ых ");
// r.foundIndex(fragment);
// System.out.println(fragment);
fragment = "";
}
}
br.close();
}
catch (Exception e) {
System.out.println("tshtsht");
e.printStackTrace();
}
}
ArrayList<String> wordEnd = new ArrayList();
void wordEnd()
{
wordEnd.add("ых");
wordEnd.add("ах");
wordEnd.add("ла");
wordEnd.add("ся");
}
ArrayList<String> wordAppend = new ArrayList();
void wordAppend()
{
wordAppend.add(" ");
wordAppend.add(".");
wordAppend.add(",");
}
void foundIndex(String read) throws IOException// получать строку
{
int addWordCount = 0;
int countChangeEnd = 0;
int goEnd = 0;
int countArrayEnd = 0;
String readMe = read;
for (int indexEnd = 0;; indexEnd += 1) {
indexEnd = readMe.indexOf(wordEnd.get(countArrayEnd) + wordAppend.get(countChangeEnd), indexEnd); // окончания + . или пробел
if (indexEnd == -1) {
if (countArrayEnd + 1 == wordEnd.size()) {
if (countChangeEnd + 1 == wordAppend.size()) {
break;
}
countArrayEnd = 0;
countChangeEnd++;
continue;
}
countArrayEnd++;
continue;
}
int indexStart = readMe.lastIndexOf(" ", indexEnd);
System.out.println(indexStart + " // " + indexEnd);
if (wordEnd.get(countArrayEnd).equals("ла") || wordEnd.get(countArrayEnd).equals("ли") || wordEnd.get(countArrayEnd).equals("ло")) {
System.out.println(readMe.substring(indexStart + 1, indexEnd + wordEnd.get(countArrayEnd).length() - 1));
}
else {
System.out.println(readMe.substring(indexStart + 1, indexEnd + wordEnd.get(countArrayEnd).length()));
}
}
}
}
С чистотой кода явные проблемы, но да ладно.
Проблема банальная, вы в основной программе вызываете функции заполнения массивов, а только потом уже вызываете свою функцию.
Reader reader = new Reader();
reader.wordAppend();
reader.wordEnd();
А в вашей функции вы этого не делаете и при попытке получить элемент из пустого списка закономерно получается ошибку ArrayList -> get -> IndexOutOfBoundsException.
ArrayList<String> wordAppend = new ArrayList();
wordAppend.get(0)
Думаю так должно работать
...
rr.wordAppend();
rr.wordEnd();
rr.foundIndex("р ых. ых, ах sах gых укусила ах ыыыыыы ых ");
...
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Любой другой код работаетЯ удалил все скрипты полностью, оставил только этот - не работает
Как можно заменить знаки вопроса? Достучаться до элементов если не знаешь имя
Всем приветМне нужно заполнить один input на другом сайте и нажать кнопку отправить, потом достать полученные данные