如何从EditText中获取单词?

时间:2017-07-09 01:21:13

标签: android android-edittext

我希望用户逐个输入String字词,

“animal”是一个空String,当用户输入它之后或之前的单词时,我希望得到它,我想在当前位置获取该单个单词。

即:

当我输入我的EditText“cat is an animal”时,“cat”这个词将被保存在动物列表中,或者“dog is a animal”并保存“dog”这个词,然后TextView说'改为“ok”'。

public class MainActivity extends AppCompatActivity {

ArrayList<String> animal_names = new ArrayList<>();
String animal = null;
TextView say;
EditText enter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    say = (TextView) findViewById(R.id.textView);
    enter = (EditText) findViewById(R.id.editText);


    try {
        InputStream input = getAssets().open("animals names.txt");
        InputStreamReader rd = new InputStreamReader(input);
        BufferedReader br = new BufferedReader(rd);
        String line;
        while ((line = br.readLine()) != null) {
            animal_names.add(line);
        }

    } catch (IOException e) {
        e.printStackTrace();
    }


}

public void click(View view) {
    String s = enter.getText().toString().trim();
    if (s.equals(animal+" is an animal")){
        say.setText("ok");
        animal_names.add(animal);
    }else if (s.equals("is " + animal + "an animal" )){
        if (animal_names.contains(animal)){
            say.setText("yes");
        }else {
            say.setText("no");
        }
    }
}

3 个答案:

答案 0 :(得分:0)

使用文本观察器,当用户字符串等于动物时,将这些字母保存在文本观察器内的新字符串中

答案 1 :(得分:0)

无法理解何时执行该操作。无论如何,我从您的问题中理解的是,您需要将TextWatcher()列表器添加到EditText并在其afterTextChanged()方法中比较您的字符串。它看起来像:

enter.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                 String s1 = s.toString().trim();
                 if (s1.equals(animal+" is an animal")){
                   say.setText("ok");
                   animal_names.add(animal);
                 }else if (s1.equals("is " + animal + "an animal" )){
                   if (animal_names.contains(animal)){
                      say.setText("yes");
                   }else {
                      say.setText("no");
                   }
                 }
            }
        }); 

----------更新-----------------

afterTextChanged()内点击或点击任何其他Button,如果需要,也可以添加其他条件。

if (s.endsWith("is an animal")) {// for "XXX is an animal" condition
            animal_names.add(s.substring(0, s.indexOf("is")).trim());
            say.setText("yes");
    }else if (s.contains("is")&&s.endsWith("an animal")) {// For "is XXX an animal" condition
       say.setText("yes");
       animal_names.add(s.substring(s.lastIndexOf("is")+2, s.indexOf("an animal")).trim());
    }else{
       say.setText("no");
    }

希望它有所帮助!如果您的要求是其他原因,请更新您的问题。

答案 2 :(得分:0)

目前您的代码会检查字符串null is an animalis nullan animal(注意您的间距错误?)

所以,很难说你是否真的需要一个TextWatcher,但可能是一个正则表达式。例如,一个简单的正则表达式可能是

"Is ([A-Za-z ]+) an animal?" 

并且

"([A-Za-z ]+) is an animal" 

然后,您将使用if (s.matches(regex)),并了解如何获取您的动物

How to extract a substring using regex

您还可以使用substringindexOf的组合来提取动物名称