【问题标题】:How to deal with a very large array with Java?如何用 Java 处理一个非常大的数组?
【发布时间】:2014-08-20 21:23:33
【问题描述】:

首先,很抱歉我的英语很糟糕,但我是意大利人,我不太懂这种语言,希望你能理解我。
我必须处理一个非常大的字符串数组(或不同类型的数据结构),特别是我必须搜索该数组中是否包含确定的单词(或其中的一部分),就像字典一样。
我在 txt 文件中有这个单词列表,有没有办法处理这些单词而不将它们加载到数据结构中? 如果没有,您建议使用什么?
谢谢

【问题讨论】:

  • 您可以在读取文件时比较每个单词...
  • 考虑 Ann 索引的内存数据库。
  • 如果您必须仔细查看它,请对其进行排序并放入树中,尽管我认为没有标准实现
  • 多大才算非常大?

标签: java arrays string data-structures large-data


【解决方案1】:

如果我解决了你的问题,那么你可以逐个字符地读取文件并将它们添加到代表 1 个单词的字符串中(也许构建一个类,这样你就可以创建一个 class.getNextWord()),然后检查这个单词反对你的阵列。喜欢:

while(class.hasWords()) {
    boolean foundWord = false;
    String word = class.getNextWord();
    for(int i = 0; i < words.length; i++) {
        if(word.compareTo(words[i])==0) {
            foundWord = true;
            break;
        }
    }
    ...doSomething...
}

我上面建议的类是什么

【讨论】:

  • 为什么要循环两次? words 是什么?
  • 他有一个文本文件中的单词和一个数组中的单词,所以第一个循环检查文件中的每个单词,第二个循环检查数组中的每个单词->“我必须处理一个非常大字符串数组”,“我在 txt 文件中有这个单词列表”所以单词是数组,单词是一个字符串,表示要从文件中签出的实际单词
  • 哦,好的。我认为这些是相同的单词列表,他想知道如何将文本文件中的单词放入数组中
  • 我不确定他/她真正想要什么,但这就是我的理解,也许我错了,你是对的,但由他/她决定:D
  • 是的,我只是感到困惑。反正你的方式更有趣。
【解决方案2】:

试试这个,它可以帮助你..

public String stringArrayCompare()
{
    for(i=0; i<stringArrayName.length;i++)
    {
        if(StringArrayName[i].matches(.*+"String_Pattern"+.*)// .* indicates any number of characters at the start of the string or in the end, use as per your code requirement.
        {
          return StringArrayName[i];
        }
    }
}

【讨论】:

    【解决方案3】:

    正如我已经写过的,我在我开发的一个后缀树版本中找到了解决方案。 如果有用,我在这里引用代码:

       /* developed by Christian Traina
        * email address: crissstian96@gmail.com
       */
    
    public class Alpha {
    private Alpha[] alpha = new Alpha[26];
    private boolean mark = false;
    
    // SEARCH
    public boolean search(String s){
        return search(s.toCharArray());
    }
    public boolean search(char[] s){
        return search(s,0);
    }
    private boolean search(char[] s, int p){
        if(p==s.length)
            return mark;
        if(alpha[s[p]-97]!=null)
            return alpha[s[p]-97].search(s, p+1);
        else
            return false;
    }
    
    //MATCHES
    //THE ASTERISK MEANS ANY CHARACTERS
    //FOR EXAMPLE, IF YOU WANT TO SEARCH A WORD OF SIX LETTERS THAT BEGINS WITH THE LETTER A, 
    //YOU HAVE TO PASS "A*****"
    public boolean matches(String s){
        return matches(s.toCharArray(), 0);
    }
    private boolean matches(char[] s, int p){
    
        if(p==s.length)
            return mark;
        if(s[p]=='*'){
    
            for(int i=0; i<26; i++)
                if(alpha[i]!=null && alpha[i].matches(s,p+1))
                    return true;
    
            return false;
        }
        else if(alpha[s[p]-97]!=null)
            return alpha[s[p]-97].matches(s, p+1);
    
        else
            return false;
    }
    
    
    // ADD
    
    public void add(String s){
        add(s.toCharArray(), 0);
    }
    public void add(char[] s){
        add(s,0);
    }
    private void add(char[] s, int p){
        if(p==s.length)
            mark=true;
        if(p>=s.length)
            return;
        if(alpha[s[p]-97]==null)
            alpha[s[p]-97] = new Alpha();
        alpha[s[p]-97].add(s, p+1);
    }
    
    
    //PRINT
    //IT PRINTS ALL THE ITEMS OF THE TREE
    
    
    public void print(){
        for(int i=0; i<26; i++)
            if(alpha[i]!=null){
                alpha[i].print(Character.toString((char)(i+97)));
            }
        System.out.println();
    }
    
    private void print(String str){
        if(mark)
            System.out.print(str+" ");
        for(int i=0; i<26; i++)
            if(alpha[i]!=null){
                alpha[i].print(str+Character.toString((char)(i+97)));
            }
    
    }
    }
    

    【讨论】:

      【解决方案4】:

      只需使用输入/输出流将文件中的单词加载到不同的数组中,然后使用您想要搜索的单词进行搜索

      【讨论】:

        猜你喜欢
        • 2010-12-27
        • 2021-10-19
        • 2010-09-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多