2012-03-21 276 views
0

我希望能够将一个字符串与所有其他字符串按顺序进行比较,然后向下移动到下一个字符串,并将该字符串与其下面的所有其他字符串进行比较。将字符串与其他字符串进行排序比较

这是我的代码。它比较第一个字符串并找不到任何匹配。然而,当另一个for循环移动到下一个值时,everystring = 1,我也是这样比较自己。每当我经过另一个循环时,我该如何去移动内循环的一个值?

if (i == everything) continue; 

它将跳过内部循环的每次迭代:

for (int everystring = 0; everystring < children.length; everystring++) { 

    String current = children[everystring].substring(0, 
     children[everystring].indexOf("_")); 

    for (int i = 1; i < children.length; i++) { 
     String innercurrent = children[i].substring(0, 
      children[i].indexOf("_")); 

     if (current.equalsIgnoreCase(innercurrent)) { 

     System.out.println("Match"); 
     } else 
     System.out.println("No Match"); 
    } 
    System.out.println(); 
} 
+0

这将比较字符串本身。 – user541597 2012-03-21 19:52:26

+0

我通过在outer for循环中添加i = everystring + 1来修复它。 – user541597 2012-03-21 19:56:17

+0

你能否包含一些样本数据?如果我们知道你的意图,这可能会有所帮助。无论如何,当你在一个循环中时,你总是可以增加一个循环计数器。只是说我++;或者everystring ++; – JohnnyK 2012-03-21 19:56:38

回答

1

环总是从0到children.length [在内环],和在内部循环的开头添加以下条件i == everything,所以你只会检查不相等的字符串。

然而要注意你会检查每个2串两次(例如:你会检查i == 1everything == 2i == 2, everything == 1
如果你不希望它:迭代从everything + 1内循环,直到children.length

+0

OP要求“...将字符串与其下面的所有其他字符串进行比较......”。你的答案只是避免将字符串与自身匹配,而不是跳过所有以前检查过的字符串。 – sharakan 2012-03-21 19:59:22

+0

@sharakan:“在它下面”并不是一个明确的定义,我给出了两种可能性并且包含了两种解释,他可以选择他喜欢的。 – amit 2012-03-21 20:01:04

0
This. 
for (int everystring = 0; everystring < children.length - 1; everystring++) { 

    String current = children[everystring].substring(0, 
     children[everystring].indexOf("_")); 

    for (int i = everystring + 1; i < children.length; i++) { 
     String innercurrent = children[i].substring(0, 
      children[i].indexOf("_")); 

     if (current.equalsIgnoreCase(innercurrent)) { 

     System.out.println("Match"); 
     } else 
     System.out.println("No Match"); 
    } 
    System.out.println(); 
} 
1

如果我正确理解你的问题,所有你需要做的就是在你的内部循环的初始使用的everystring值:

for (int everystring = 0; everystring < children.length; everystring++) { 
    String current = children[everystring].substring(0, 
    children[everystring].indexOf("_")); 
    for (int i = everystring+1; i < children.length; i++) { 
     String innercurrent = children[i].substring(0, 
     children[i].indexOf("_")); 

     if (current.equalsIgnoreCase(innercurrent)) { 

      System.out.println("Match"); 
     } else 
      System.out.println("No Match"); 
     } 
    System.out.println(); 
} 

这将比较每个字符串与它出现在数组中的所有字符串。

+1

这将导致一个arrayindexoutofbounds当everystring == children.length - 1. – 2012-03-21 20:05:32

+0

@RalfHoppen它不会。 'i == children.length' – amit 2012-03-21 20:15:56

+0

为true时,我 2012-03-21 20:20:14

0
int i = 0;  

    for (int everystring = 0; everystring<children.length; everystring++){ 

     String current = children[everystring].substring(0,children[everystring].indexOf("_")); 

     i = everystring+1; 

    for (;i<children.length; i++){ 
     String innercurrent = children[i].substring(0,children[i].indexOf("_")); 



     if(current.equalsIgnoreCase(innercurrent)){ 

     System.out.println("Match"); 
     }else System.out.println("No Match"); 

     /* if (current.substring(0,current.indexOf("_")).equalsIgnoreCase(innercurrent.substring(0,innercurrent.indexOf("_")))){ 




      System.out.println("Match"); 


     }*/ 

    } 
    System.out.println(); 
    } 
} 
0

这是一个奇怪的代码,你在那里.__。但我会做这样的事情:

for (int i = 0; i < children.length - 1; i++) { 
    String current = children[i].substring(0,children[i].indexOf("_")); 

    for (int j = i + 1; j < children.length; j++) { 
     String compareTo = children[j].substring(0,children[j].indexOf("_")); 

     if (current.equalsIgnoreCase(compareTo)) 
      System.out.format("%s matches %s\n", current, compareTo); 
     else 
      System.out.format("%s doesn't matches %s\n", current, compareTo); 
    } 
} 

这样你比较一切只有一次,你不要在同一位置比较本身。

相关问题