【问题标题】:How do I make an ArrayList of ArrayLists from an ArrayList by using a function that makes ArrayLists in an ArrayList from Strings of an ArrayList [duplicate]如何使用从 ArrayList 的字符串中生成 ArrayList 中的 ArrayList 的函数从 ArrayList 中生成 ArrayList [重复]
【发布时间】:2013-02-28 21:34:00
【问题描述】:

我有一个java程序

  • 读取文本文件,
  • 把所有的词都放在ArrayList
  • 将所有单词放入ArrayList,小写并删除标点符号

我现在想再做两件事。

  • 创建 String ArrayList 字符串的所有字谜的函数,
  • ArrayList 的 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);
        }
    }

这方面的一些指导会很棒。

【问题讨论】:

  • 老兄,我们在你的ArrayList 中添加了一个ArrayList,这样你就可以.add 而你.add
  • 致所有投反对票的人。如果您不喜欢我的说法,请纠正我,或者如果您不明白我在问什么,请帮助我使这篇文章更容易理解。谢谢。
  • 无需将您的完整问题放在title中。标题文本框下方的文本区域有很多空间

标签: java methods multidimensional-array arraylist anagram


【解决方案1】:

要从一个字符串中生成所有字谜,请按照以下步骤操作:

第 1 步:使用 String 的 replace 删除空格,并确保已删除所有标点和大写。

第 2 步:编写此函数 f(string s, string anagram, ArrayList&lt;String&gt; array) 并使用 s = yourstring, anagram = "", array = new ArrayList&lt;String&gt;() 调用它:

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...也就是 n 阶乘项将在数组中,这就是你知道你在正确的轨道上的方式:)

如果您需要数组列表中每个字符串的字谜,只需在 for 循环中调用它即可。

【讨论】:

    【解决方案2】:

    经过一番挣扎,我试图理解你的问题,这是我的答案。如果我错了,请纠正我。首先,您可以使用一个数组列表进行所有预处理,例如更改大小写、删除语法。现在到实际功能:

    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);
        }
    }
    

    【讨论】:

    • 我所拥有的程序的想法是向查看它的人展示我正在采取的步骤,以便从文件中获取单词的字谜以及原始单词。因此,在此过程中,出于打印原因,我在代码末尾制作了多个列表。
    • @RyanTibbetts 是的,我明白了,所以我的回答试图简化程序的整体结构。你可以看到我还没有编写用于查找字谜本身的函数 - 希望你能想出那个;)
    • 我已经有一个生成字谜的函数,但我不知道如何将每个字谜放入我想一遍又一遍地放入另一个数组列表的数组列表中的位置。
    猜你喜欢
    • 2020-03-06
    • 2020-12-29
    • 2017-10-04
    • 1970-01-01
    • 2018-05-29
    • 2019-09-04
    • 1970-01-01
    • 2017-04-10
    • 2019-02-18
    相关资源
    最近更新 更多