2013-09-11 5 views
-1

Я пишу код для подсчета различных слов из строкового массива в java и затем хранения этих разных слов в массиве и подсчета в другом массиве. Если строковый массив похож на String [] appName = {"123", "abc", "Twitter", "123", "abc", "123", "Twitter", "abc", "abc"}; затем в одном массиве {«123», «abc», «Twitter»} shoud приходят, а в другом массиве подсчитывается. Но в строке 21 есть исключение. Любая помощь будет доступной.Подсчитайте слово в массиве String в java

public class counts { 

    /** 
    * @param args 
    */ 
    public static void countWords(String[] appName){ 
      int count =1; 
      int[] count1 = new int[appName.length]; 


      String[] array= new String[12]; 

      for(int k= 0 ;k< appName.length;k++) 

      { 
       if(array.length>0) 
       { 
       for(int l =0; l<array.length;l++) 
       { 
       if(!array[l].equals(appName[k])|| array[l]== null) 

       { 
        array[k] = appName[k]; 
       } 
       } 
       System.out.println(array[k]); 
       } 
       } 
      for (int i=0; i<appName.length; i++){ 
      String temp1 = appName[i]; 
      //System.out.println(temp + " "); 


      count = 1; 
      for(int j=i+1; j<appName.length; j++){ 
      String temp2= appName[j]; 
      if(temp1.equals(temp2)) 
      { 
       count++; 
      } 




      } 
      count1[i] = count; 

      System.out.println(count1[i]); 
      } 

     } 



    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     String[] appName = {"123", "abc", "Twitter", "123", "abc","123","Twitter", "abc","abc"}; 
      countWords(appName); 
    }  
} 
+0

Есть ли причина, что вы не просто положить все 'String's в' 'Set ? Кроме того, всегда отправляйте трассировку стека из любого исключения; не говорите, что вы его получили. – chrylis

+0

Добавьте их все в 'HashSet'. Он не будет содержать дубликатов. Затем просто поместите его в массив. – Obicere

+0

Вам нужно решить проблему таким образом? Если вы знакомы с использованием HashMap, в частности, 'HashMap ', вы можете сохранить каждую строку с подсчетом количества раз, когда она появилась. – user1445967

ответ

0

Вы shoudl проверить нуль первого до начала работы на переменном

if(!array[l].equals(appName[k])|| array[l]== null) 

становится

if(array[l]== null||!array[l].equals(appName[k])) 

, но использовать Set<String> бы лучше

0

Чтобы получить уникальные значения, вы можете сделать следующее:

Set<String> mySet= new HashSet<String>(Arrays.asList(appName)); 
String[] distinctAppName= mySet.toArray(new String[mySet.size()]); 
0

Вы можете попробовать следующие способы. Это может вам помочь.

public class Counts { 
public static void main(String[] args) { 
    String[] appName = {"123", "abc", "Twitter", "123", "abc", 
              "123", "Twitter", "abc", "abc"}; 
    countWords(appName); 
} 

public static void countWords(String[] appName) { 
    Map<String, Integer> map = new HashMap<>(); 
    for (String i : appName) { 
     Integer val = map.get(i); 
     if (val == null) { 
      val = 0; 
     } 
     map.put(i, val + 1); 
    } 
    String[] uniqueStr = new String[map.size()]; 
    int[] count = new int[map.size()]; 
    int i = 0; 
    for (Map.Entry<String, Integer> entry : map.entrySet()) { 
     uniqueStr[i] = entry.getKey(); 
     count[i] = entry.getValue(); 
     i++; 
    } 
    System.out.println("unique String array: "+ Arrays.toString(uniqueStr)); 
    System.out.println("String count array: "+ Arrays.toString(count)); 
} 
} 

Живая demo

+0

большое спасибо. Я узнал о хэш-карте также ... – Piyush

+0

@Piyush приветствую вас. Если этот ответ поможет вам. вы можете принять этот ответ. –

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