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