2014-04-16 29 views
1

的長陣列的最有效的方法,它返回5個字符串數組,我傳遞給該方法比較我使用的語音識別器,以獲得來自用戶的語音輸入的字符串

public int analyzeTag(ArrayList<String> voiceResults,Editor editor, Context context){ 
      for (String match : voiceResults) { 
       Log.d(TAG, match); 
       if (match.equalsIgnoreCase(context.getResources().getString(R.string.first_tag))){ 
        editor.append(context.getResources().getString(R.string.first_tag)); 
        return 1; 
       } 
       else if (match.equalsIgnoreCase(context.getResources().getString(R.string.second_tag))){ 
        editor.append(context.getResources().getString(R.string.second_tag)); 
        return 1; 
       } 
       //etc....(huge list of tags) 
       //Some tags might also have acceptable variations, example: 
       else if (match.equalsIgnoreCase("img") || match.equalsIgnoreCase("image") 
       { 
        editor.append("img"); //the string to append is always taken from the first variation 
       } 

      } 
      return 0; 
     } 

此方法將結果與標籤列表進行比較,標籤列表將包含數百個標籤,因此我希望找到最有效的方法來執行此操作。

我需要幫助:

。是我比較結果的最有效的方式?有沒有更好的辦法? (從用戶體驗的角度來看,我不希望用戶等待很長時間才能得到結果)。 語音輸入將是我的應用程序,所以這個方法會被經常叫的重要組成部分

。我有標籤,一個長長的清單顯然,如果(),ELSEIF()路線會是相當重複,有沒有辦法來迭代這個?考慮到一些標籤可能會有變化(甚至超過1),並且變體1(「img」)對於每個人都是相同的,但其他變體將是區域/語言敏感的示例:英語用戶的「圖像」圖片「意大利用戶等 附加到編輯器的文本將始終從第一個變化

+2

檢測的情況下這是路要走,而不是採取這些情況下考慮增加一些效率可能會有幫助。 在使用String.Contains(VoiCeString,Major_Word_From_TriggerString)之前,如何使用此比較。即使比較它們的長度以剔除不匹配的情況也可能很方便。 –

+0

你是對的,謝謝:) – DoubleP90

+0

你的方式是絕對低效的。首先,不要將每個字符串存儲在單獨的資源字符串中,而應使用String數組資源:http://developer.android.com/guide/topics/resources/string-resource.html#StringArray其次,當您的應用程序啓動時,收集所有字符串轉換爲'HashSet'集合並使用它的contains()方法來發現給定的字符串是否出現在集合中。 –

回答

2

如何把標籤放入一個StringArray,然後遍歷數組?

String[] tags = context.getResources().getStringArray(R.array.tags); 
    for (String match : voiceResults) { 
     for (int index = 0; index < tags.length; index++) {    
      if (match.equalsIgnoreCase(tags[index]) { 
       editor.append(tags[index]); 
      } 
     } 
    } 

這裏的doc on StringArray

+0

但是,如果我有一些變體,則此方法不起作用(請參閱代碼我在那裏發表評論)。 另請注意,變體將對區域設置非常敏感 – DoubleP90