2014-04-27 3 views
-1

Я пытаюсь выполнить поиск по массиву и выделить все уникальные строки, означающие печать только одного экземпляра каждой строки. Затем я хочу, чтобы они распечатали их. Однако он не обнаруживает никаких уникальных строк. Может кто-нибудь помочь мне выяснить, что не так?Поиск уникальных строк в массиве

Примечание: По сути, я пытаюсь подсчитать, сколько строк есть, без учета дубликатов.

public class Test { 
public static String uniquecenter; 

public static void main (String[] args){ 


    //Grab Data and Feed into Centers 
    String centers[]=new String[1000]; 


    /* Only for Testing Purposes*/ 
    centers[0] = "Table Tennis"; 
    centers[1] = "Soccer"; 
    centers[2]= "Baseball"; 
    centers[3] = "Table Tennis"; 

    //Unique Centers 
    String uniquecenters[]=new String [1000]; 


    //0 out array 
    for(int i=0; i<1000;i++){ 
     uniquecenters[i]="0"; 
    } 


    //loop through center array 
    for(int i=0; i <1000; i++){ 

     boolean unique=false; 


     //Loop through unique centers 
     for(int l=0; l<1000; l++){ 

      //if it finds that this point in the centers array already has been indexed in the unique centers 
      //array then it is not unique...so move on to the next center 
      if(uniquecenters[l].equals(centers[i])){ 
       unique=true; 
      } 


     } 

      //if it never found this string in the uniquecenters array... 
      if(unique==false){ 

       //find an empty spot in the unique array 
       for(int l=0;l<1000;l++){ 

        //grab the unique centers string 
        String c=uniquecenters[l]; 

        //check if something is already in this spot...if not then... 
        if(uniquecenters.equals("0")){ 
         //..make it a unique center 
         uniquecenters[l]=uniquecenter; 
        }//End of placing center 
       }//end of looking for unique spot 
      }//end of if it is unique 


    }//end of creating this unique center array 

    //print all unique strings 
    for(int i =990; i>=0;i--){ 

     String print =uniquecenters[i]; 

     //if it is emptry 
     if(print.equals("0")){ 

     }else{ 
      //print this unique center 
      System.out.println(print); 
     } 
    } 
} 

}

+0

Почему бы просто не использовать строки в качестве ключей для 'HashMap'? – AntonH

+0

Как найти уникальные строки с помощью hashmap? – user3474775

+0

@AntonH Это на самом деле намного лучше подходит для 'Set'. Существует ряд проблем с этим кодом, но стилистически я сразу замечаю странное использование слова unique и использование жестко заданных ограничений вместо 'array.length'. – chrylis

ответ

2

Вы можете использовать Set, который, по определению, не содержит дубликатов:

String centers[]; 

... 

List<String> centerList = Arrays.asList(centers); 
Set<String> uniqueCenters = new HashSet<String>(); 
uniqueCenters.addAll(centerList); 
uniqueCenters.remove(null); 
Integer numberOfUniqueStrings = uniqueCenters.size(); 
+1

Этот код, скорее всего, добавит в набор неожиданный «нуль». –

+0

Спасибо, я обновил ответ – abl

Смежные вопросы