获取单词/字符串数组的含义

时间:2013-08-25 18:53:57

标签: java android

所以这是我的问题的延续:here

    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中输入的每个单词的具体含义放在一起。任何帮助都将很高兴。感谢。

7 个答案:

答案 0 :(得分:1)

这样的事情怎么样?

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

答案 1 :(得分: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]);
}

答案 2 :(得分: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!");
}

答案 3 :(得分: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");
        }

答案 4 :(得分: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);

答案 5 :(得分: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中。如果你的单词列表与句子的长度相比会很大,那就很好了。

答案 6 :(得分:0)

我建议你制作一个Hashmap&lt; String,ArrayList&lt; String&gt;&gt;

因为你对一个词有多个含义。

所以现在只需传递你需要找到的含义。

如果你需要以排序的方式存储它们,你也可以使用treemap。

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

的ArrayList&LT;字符串&GT;意思是= map.get(“牛仔”);

for(String string:meaning){ Log.v( “意”,字符串); }