如何用Java处理一个非常大的数组?

时间:2014-06-30 13:29:13

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

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

4 个答案:

答案 0 :(得分:0)

如果我的问题正确,那么您可以逐个读取文件字符并将它们添加到表示1个Word的字符串中(也许构建一个类,这样您就可以创建一个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...
}

哪个类是我上面建议的

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

}
}

答案 3 :(得分:-1)

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