2013-03-13 4 views
-4

У меня есть программа Java, котораяКак сделать ArrayList из ArrayLists из ArrayList с помощью функции, которая делает ArrayLists в качестве ArrayList из струн ArrayList

  • читает текстовый файл,
  • пут все это слово в качестве ArrayList
  • помещает все слова в ArrayList, строчные буквы с пунктуацией удалены

теперь я хочу сделать еще две вещей.

  • Функция, которая создает все анаграммы струны струнных ArrayList,
  • ArrayList из ArrayLists, который будет хранить каждый из анаграмм и исходной строки в каждой ArrayList в ArrayList.

Так что я хочу разработать функцию, которая будет принимать строку, я вставив от одного ArrayList в новый ArrayList и сделать всю эту анаграмму и поместить их в ArrayList, а затем положить, что ArrayList в ArrayList, который чтение старого ArrayList.

Что-то, что будет выглядеть следующим образом:

List<String> arLists = new ArrayList<String>(); //makes new array list 
    for(String arList : words) //takes values from old array list 
     ArrayList<String> anaLists = new ArrayList<String>(); //makes a new array list 
     arLists.add(anag(anaLists,arList,"")); //uses a function that makes an 

Я хочу сделать функцию своего рода, как это, но то, что я сделал здесь ... на самом деле не работает.

public void anag(ArrayList<String> anaLists, String s1, String s2){ 
    if(s1.length() == 0){ 
     return anaLists; 
    } 
    for(int i = 0 ; i < s1.length() ; i++){ //only runs for string length 
     String anaList = anag(s1.substring(0, i) + s1.substring(i+1, s1.length()), s1.charAt(i) + s2); 
     anaLists.add(anaList); 
     } 
    } 

Некоторые рекомендации по этому вопросу были бы превосходными.

+0

Yo dawg, мы помещаем 'ArrayList' в ваш' ArrayList', поэтому вы можете '.add', пока вы' .add' – Patashu

+0

Для всех людей, которые проголосовали за это.Если вам не нравится, как я это говорю, тогда исправьте меня или еще лучше, помогите мне сделать этот пост более понятным, если вы не поймете, что я прошу. Благодарю. –

+2

Не нужно ставить полный вопрос в ** название **. Существует много места в текстовой области под заголовком текстового поля – Apurv

ответ

0

Для того, чтобы все анаграммы из строки, выполните следующие действия:

Шаг 1: Использование String's replace, чтобы удалить пробелы, и убедитесь, что все пунктуации и капитализация удалены.

Шаг 2: Напишите эту функцию f(string s, string anagram, ArrayList<String> array) и вызвать его с s = yourstring, anagram = "", array = new ArrayList<String>():

If s is empty, add anagram to array and return 
For each letter l in s: 
    newanagram = anagram + l 
    news = s with l taken out of it (e.g. make a substring of everything before l in s and everything after l in s, and concatenate them together) 
    call f(news, anagram, array) 

Это будет исследовать «дерево» рекурсивных вызовов самостоятельно, и на каждом «лист» из «дерева» каждое из возможных перестановок всех букв будет добавлено в массив. Когда он заканчивается, n * n-1 * n-2 * n-3 ... aka n факториалов будут в массиве, так вы знаете, что находитесь на правильном пути :)

И если вам нужна анаграмма каждой строки в arraylist, просто назовите ее в цикле for.

0

После некоторой борьбы я попытался понять ваш вопрос, и вот мой ответ. Поправьте меня, если я ошибаюсь. Прежде всего, вы можете сделать все, что нужно для предварительной обработки, например, сменить регистр, удалив грамматику, используя один список массивов. Теперь к фактической функции:

public void getAnag(String baseStr, ArrayList<String> finalAnagList) 
{ 
    ArrayList<String> anagList = new ArrayList<String>(); 
    anagList = getAnagrams(baseStr); // getAnagrams is a support function to get the anagrams 
    anagList.add(baseStr); // I suppose you want to add the base string also to the anagrams list 
    finalAnagList.add(anagList); 
} 

И ваша функция вызова в программе будет:

public void testAnagrams() 
{ 
    ArrayList<String> words = getWordsFromFile("/home/list.txt"); // gets the words from the file 
    ArrayList<String> anagramsList = new ArrayList<String>(); 
    foreach(String word : words) 
    { 
     getAnag(word, anagramsList); 
    } 
} 
+0

Идея программы, которая у меня есть, - показать кому-то ее просмотр, шаги, которые я предпринимаю, чтобы получить анаграммы слов, взятых из файл, а также оригинальные слова. Поэтому по пути я сделал несколько списков для печати в конце моего кода. –

+0

@RyanTibbetts Да, я получил это, и поэтому мой ответ пытается упростить общую структуру программы. Вы можете видеть, что я не написал функцию для поиска анаграмм - надеюсь, вы можете это сделать;) –

+0

У меня уже есть функция, которая делает анаграммы, но я не знаю, как поместить каждую анаграмму в позицию в arraylist, который я хочу снова и снова вводить в другой arraylist. –

Смежные вопросы