Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-使用AsList在另一个StringArray中使用StringArray_Java_Arrays_List_Iterator - Fatal编程技术网

Java-使用AsList在另一个StringArray中使用StringArray

Java-使用AsList在另一个StringArray中使用StringArray,java,arrays,list,iterator,Java,Arrays,List,Iterator,尽管寻找,我还是无法解决我遇到的问题。我想在另一个String数组中查找String数组。但是这个array.asList似乎工作不正常,因为它必须给出一个true。我只使用了代码的这一部分,以使其易于理解。那些“如果”必须起作用,这就是我试图实现的目标。(在妄想中,所有东西都必须返回true值)问题出在哪里?我感谢你的帮助 final Iterator<String[]> sic2 = sections.iterator(); String[] lines = temp.split

尽管寻找,我还是无法解决我遇到的问题。我想在另一个
String
数组中查找
String
数组。但是这个
array.asList
似乎工作不正常,因为它必须给出一个
true
。我只使用了代码的这一部分,以使其易于理解。那些“如果”必须起作用,这就是我试图实现的目标。(在妄想中,所有东西都必须返回
true
值)问题出在哪里?我感谢你的帮助

final Iterator<String[]> sic2 = sections.iterator();
String[] lines = temp.split("\n");
String[] sectionname  ;

for (int i = 0; i < lines.length; i++) { 
    while(sic2.hasNext()) {
        final String[] val2 = sic2.next();  
        //Choping up the long string in parts.
        sectionname=val2[1].split("\\|");

        for (int k=0; k<sectionname.length; k++) {
            if (lines[i].contains("200") && Arrays.asList(lines[i + 1]).contains(sectionname[k]) && lines[i + 2].contains("=")) {
                lines[i] = lines[i].replace("200", "20_"); //do this if the section names are found at the next line of section codes.
                System.out.println(true);
            }

            if (lines[i].contains("200") && Arrays.asList(lines[i]).contains(sectionname[k])    && lines[i + 1].contains("=")) {
                lines[i] = lines[i].replace("200", "20_"); //do this if the section codes and names are in the same line.

            }
        }       
    }
final迭代器sic2=sections.Iterator();
字符串[]行=临时拆分(“\n”);
字符串[]节名;
对于(inti=0;i对于(int k=0;k我不确定您在这里期望什么,但请注意,因为
line
是一维字符串数组
line[I+1]
是它的元素,即普通字符串。这意味着
Arrays.asList(line[I+1])
创建一个只包含一个元素的列表
line[I+1]
因此方法
contains()
将返回
true
,前提是该元素等于
sectionname[k]


此外,您的代码相当复杂,包含许多类似的片段和在链中调用的片段,因此不太容易理解发生了什么。请将您的长行和复杂条件拆分为较小的行,尝试调试代码并找到错误。

当您的第一行被调用时,您的迭代器也有问题完成后,它不会返回开始状态,因此
sic2.hasNext()
将始终为
false
,并且您的代码不会对i>0执行任何操作我将稍微解决此问题,如下所示:

private boolean allWordsAreInEachLine(String[] words, String[] lines) {
    for (String line : lines) {
        if (!allWordsAreInLine(words, line)) {
            return false;
        }
    }
    return true;
}

private boolean allWordsAreInLine(String[] words, String line) {
    for (String word : words) {
        if (!line.contains(word)) {
            return false;
        }
    }
    return true;
}
然后像下面这样称呼它:

//This is where your code is currently executed
//...
//...
if (allWordsAreInEachLine(sectionNames, lines) {
    //Do whatever you want to do here...
}

我编辑并更正了Edd的答案,Edd的逻辑非常适合创建。但是,它不起作用,因为它仅在最后一个元素为
true或false
时才返回

下面是如何在一个较大的数组中搜索一个较小的数组

private static boolean allWordsAreInEachLine(String[] words, String[] lines) {
    boolean found=false;
    for (String line : lines) {
        if (allWordsAreInLine(words, line)) {
            found=true; break;
        }
    }
    return found;
}

private static boolean allWordsAreInLine(String[] words, String line) {
    boolean found=false;
    for (String word : words) {
        if (line.contains(word)) {
            found=true;
            break;
        }
    }
    return found;
}
然后调用如下函数:

for (int i = 0; i < lines.length; i++) {
    if (lines[i].contains("200") && allWordsAreInLine(words, lines[i+1]) {
        System.out.println("worked!");
        lines[i] = lines[i].replace("200", "20_"); 
    }
}
for(int i=0;i
当你说“想在另一个
字符串
数组中查找
字符串
数组”时,你的确切意思是什么?你想知道
字符串[]草堆
是否包含
字符串[]针
的所有值吗?我的意思是,在“行”的每个成员中搜索“sectionname”的每个成员您的要求似乎与您的问题不一致。请告诉我们输入和期望的输出。。
for (int i = 0; i < lines.length; i++) {
    if (lines[i].contains("200") && allWordsAreInLine(words, lines[i+1]) {
        System.out.println("worked!");
        lines[i] = lines[i].replace("200", "20_"); 
    }
}