0

所以这是我从这个线程提出的问题的延续:这里

    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");
   }

但我似乎无法弄清楚如何以及在何处将用户输入的每个单词的具体含义放在编辑文本中。任何帮助将不胜感激。谢谢。

4

7 回答 7

1

类似的东西呢?

int index;
...
if (s.toLowerCase().contains(words[i].toLowerCase())) {
    check = true;
    index = i;
} else {
....
if (check) {
   System.out.println(meanings[index]);
} else {
...
于 2013-08-25T18:57:31.537 回答
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]);
}
于 2013-08-25T18:59:33.477 回答
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!");
}
于 2013-08-25T19:01:49.610 回答
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");
        }
于 2013-08-25T19:04:13.400 回答
1

为什么不使用java.util.HashMap每个单词都对应一个含义的 a 呢?

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);
于 2013-08-25T19:04:22.133 回答
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]));
  }
}

这基本上从编辑文本中获取句子,将其拆分为单词,然后检查每个单词是否在 HashMap 中。如果您的单词列表与句子的长度相比非常大,这很好。

于 2013-08-25T19:15:26.307 回答
0

我建议你制作一个 Hashmap<String ,ArrayList<String>>

因为你对 oneword 有多个含义。

所以现在只需传递您需要找到含义的单词。

如果您需要以排序方式存储它们,您也可以使用树形图。

所以这里是你如何找到一个词的意思的方法。

ArrayList<String> 含义 =map.get("cowboy");

for(String string : meaning ) { Log.v("meaning",string); }

于 2013-08-25T19:33:17.963 回答