Я пытаюсь написать иерархический блок, который помещает элементы в ArrayList, кроме отдельного массива ArrayList. Что делает блок, это взять существующий ввод текста и добавляет каждую строку текста в элементы ArrayList. Каждая строка затем создается как ArrayList of Strings, причем каждая строка является словом в этой строке (я использовал String Split в пробелах ("") для выполнения этого).ArrayList нельзя отбрасывать в java.util.ArrayList, toArray ничего не возвращает
Моя проблема при попытке создать это мне нужно использовать Arrays.asList (поскольку строка Split возвращает список)
Action Syllables = new AbstractAction("Syllables") {
public void actionPerformed(ActionEvent e) {
ArrayList<String> text = LinetoList(area);
//"text" is a String ArrayList of every "line" in a piece of text
//LinetoList is a method that returns an ArrayList based on each new line
ArrayList<ArrayList> words = new ArrayList();
for (int i = 0; i < text.size(); i++) {
ArrayList sentence = (ArrayList) Arrays.asList(text.get(i).split(" "));
/*Sentence is currently a list, however, changing the type to an Array
* or Arraylist Changes nothing */
words.add(sentence);
}
for (int k = 0; k < words.size(); k++) {
for (int i= 0; i < words.get(k).size(); i ++) {
System.out.println(words.get(k).get(i));
}
}
}
};
Это был мой оригинальный метод, который возвращает ошибку. С тех пор я немного скорректировал, что больше не возвращает ошибку, но ничего не возвращает.
Action Syllables = new AbstractAction("Syllables") {
public void actionPerformed(ActionEvent e) {
ArrayList<String> text = LinetoList(area);
//"text" is a String ArrayList of every "line" in a piece of text
//LinetoList is a method that returns an ArrayList based on each new "line"
ArrayList<ArrayList> words = new ArrayList();
for (int i = 0; i < text.size(); i++) {
ArrayList <String> sentences = new ArrayList();
String sentence[] = text.get(i).split(" ");
sentence = sentences.toArray(sentence);
/*Sentence is currently a list, however, changing the type to an Array
* or Arraylist Changes nothing */
words.add(sentences);
}
if (words.size() == 0)
{System.out.println("Theres nothing here"); }
else {
for (int k = 0; k < words.size(); k++) {
for (int i= 0; i < words.get(k).size(); i ++) {
System.out.println(words.get(k).get(i));}
}
}
}
};
Любая обратная связь или идеи о том, как подойти к решению, приветствуются.
EDIT: Некоторые люди попросили функцию LinetoList. Большинство программ использует ArrayLists строк, поэтому он так сильно используется здесь.
private static ArrayList<String> LinetoList(JTextArea textArea) {
String s[] = textArea.getText().split("\\r?\\n");
ArrayList<String>arrList = new ArrayList<>(Arrays.asList(s)) ;
return arrList;
}
1) 'String.split()' возвращает 'Array []' not 'List' – Antoniossss
Обратная связь: рассмотрите возможность переименования переменных. предложения являются ArrayList, а затем предложение представляет собой массив ... Я нашел это довольно запутанным. Значение: старайтесь избегать имен переменных, которые почти идентичны. – GhostCat
Использовать 'ArrayList предложение = новый ArrayList <> (Arrays.asList (предложения));' и затем 'words.addAll (предложение)'. Вы могли бы просто работать со списком вместо этого, поскольку он, кажется, выходит из области действия после добавления слов в любом случае. –
Soronbe