2013-08-25 5 views
0

Так это продолжение моего вопроса из этой темы: hereПолучить значение массива слово/String

String[] words = {"cowboy", "animal", "monster"}; 
    String[] meanings = {"meaning1", "meaning2", "meaning3"}; 

    boolean check = false; 

    for (int i = 0; i < words.length; i++) { 
    if (s.toLowerCase().contains(words[i].toLowerCase())) { 
     check = true; 
    } else { 

    } 
    } 
    if (check) { 
    System.out.println("Yes"); 
    } else { 
    System.out.println("No"); 
    } 

Но я не могу показаться, чтобы выяснить, как и где поставить конкретный смысл каждое слово, которое было введено пользователем в edittext. Любая помощь будет с радостью оценена. Благодарю.

+0

Смотрите помогает ли следующие темы: http://stackoverflow.com/questions/7493287/android-how-do-i-get-string-from-resources-using-its-name – Daniel

ответ

1
static String[] words = { "Cowboy", "animal", "monster" }; 
    static String s = "My animal is a Cowboy"; 
    static boolean check = false; 
    static String[] meanings = {"meaning1", "meaning2", "meaning3"}; 
    static ArrayList<String> typed_words = new ArrayList<String>(); 
    static ArrayList<String> typed_meanings = new ArrayList<String>(); 


     for (int i = 0; i < words.length; i++) { 
      if (s.toLowerCase().contains(words[i].toLowerCase())) { 

       typed_words.add(words[i]); 
       typed_meanings.add(meanings[i]); 
       check = true; 

      } else { 

      } 

     } 

     if (check) { 
      System.out.println("Yes"); 
      for(int i=0;i<typed_words.size();i++){ 
       System.out.println("Word: "+typed_words.get(i)+" Meaning: "+typed_meanings.get(i)); 
      } 

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

Что относительно чего-то подобного?

int index; 
... 
if (s.toLowerCase().contains(words[i].toLowerCase())) { 
    check = true; 
    index = i; 
} else { 
.... 
if (check) { 
    System.out.println(meanings[index]); 
} else { 
... 
1

Если words и их meanings имеют одинаковые относительные позиции в двух массивах затем повторно использовать индекс i, чтобы напечатать соответствующее значение, а также. Но теперь i должен быть определен вне цикла, так что теперь он имеет большую область видимости и доступен внутри проверки if.

int i = 0 
for (; i < words.length; i++) { 
    if (s.toLowerCase().contains(words[i].toLowerCase())) { 
    check = true; 
    break; 
    } 
} 
if (check) { 
    System.out.println("Meaning found: " + meanings[i]); 
} 
1

Поскольку слова и смыслы массивы имеют относительную индексацию, Вы также можете выполнить

boolean check = false; 

for (int i = 0; i < words.length; i++) { 

    if (s.equalsIgnoreCase(words[i])) { // We don't need "toLowerCase" 

     System.out.println("Word: " + words[i] + "\tMeaning: " + meanings[i]); 
     check = true; 
     break; // Match found; so get out of the loop 

    } 
} 

if(check){ 
    System.out.println("Found!"); 
} else { 
    System.out.println("Not Found!"); 
} 
1

Почему бы не использовать java.util.HashMap, в котором каждое слово карты в смысле?

String s = ""; 
HashMap<String,String> meaningMap = new HashMap<String,String>(); 
//just for the example 
meaningMap.put("cowboy", "meaning1"); 
... 
if (s.toLowerCase().contains(words[i].toLowerCase())) { 
    ouput = meaningMap.get(s); 
} 
... 
System.out.println(s); 
1

Еще одна идея - использовать HashMap для хранения ваших данных.

HashMap hm = new HashMap(); 
hm.put("cowboy", "meaning1"); 
hm.put("animal", "meaning2"); 

И затем использовать

String s = yourEdittext.getText(); 
String[] words = s.split("\s+"); 

for (int i = 0; i < words.length(); i++) { 
    words[i] = words[i].replaceAll("[^\w]", ""); 
} 

for (int i=0; i < words.length(); i++) { 
    if (hm.containsKey(words[i])) { 
    System.out.println("Meaning found: " + hm.get(words[i])); 
    } 
} 

Это в основном получает sentece образуют EditText, разбивает ее на слова, затем проверяет, является ли каждое слово в HashMap. Это хорошо, если ваш список слов будет довольно большим по сравнению с длиной предложения.

+0

Вы» у вас недействительная escape-последовательность – Dunkey

0

я хотел бы предложить вам сделать Hashmap < String, ArrayList < Строка > >

, как у Вас есть больше чем одно значение для Oneword.

так что теперь просто передайте слово, необходимое для определения значения.

вы также можете использовать treemap, если вам нужно сохранить их отсортированным способом.

так вот, как вы можете найти смысл слова.

ArrayList <String> Значение = map.get ("cowboy");

для (строка строки: значение) { Log.v ("смысл", строка); }

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