Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/201.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何从编辑文本中获取单词?_Android_Android Edittext - Fatal编程技术网

Android 如何从编辑文本中获取单词?

Android 如何从编辑文本中获取单词?,android,android-edittext,Android,Android Edittext,我希望用户逐字逐句输入字符串 “animal”是一个空的字符串,我想在用户输入后面或前面的单词时获取它,我想在当前位置获取单个单词 i、 e: 当我在编辑文本中输入“猫是动物”时,单词“猫”将保存在动物列表中,或者“狗是动物”和单词“狗”被保存,然后文本视图显示“更改为“确定” public类MainActivity扩展了AppCompatActivity{ ArrayList animal_names=新的ArrayList(); 字符串=null; 文本视图说; 编辑文本输入; @凌驾 创建

我希望用户逐字逐句输入
字符串

“animal”是一个空的
字符串
,我想在用户输入后面或前面的单词时获取它,我想在当前位置获取单个单词

i、 e:

当我在编辑文本中输入“猫是动物”时,单词“猫”将保存在动物列表中,或者“狗是动物”和单词“狗”被保存,然后文本视图显示“更改为“确定”

public类MainActivity扩展了AppCompatActivity{
ArrayList animal_names=新的ArrayList();
字符串=null;
文本视图说;
编辑文本输入;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
say=(TextView)findViewById(R.id.TextView);
输入=(EditText)findViewById(R.id.EditText);
试一试{
InputStream input=getAssets().open(“animals names.txt”);
InputStreamReader rd=新的InputStreamReader(输入);
BufferedReader br=新的BufferedReader(rd);
弦线;
而((line=br.readLine())!=null){
动物名称。添加(行);
}
}捕获(IOE异常){
e、 printStackTrace();
}
}
公共作废单击(查看){
字符串s=enter.getText().toString().trim();
如果(s.equals(动物+“是动物”)){
say.setText(“ok”);
动物名称。添加(动物);
}否则,如果(s.等于(“是”+动物+“动物”)){
if(动物名称包含(动物)){
say.setText(“是”);
}否则{
say.setText(“否”);
}
}
}

使用text watcher,当用户字符串等于animal时,,,将这些字母保存在text watcher中的新字符串中

无法理解您何时要执行该操作。总之,我从您的问题中了解到的是您需要添加
TextWatcher()
listner到您的
EditText
并在其
postTextChanged()
方法中比较您的字符串。其外观如下:

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

PostTextChanged()
内尝试此操作,或单击任何其他
按钮
,如果需要,也可以添加其他条件

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

希望有帮助!!!或者如果您的要求是其他内容,请更新您的问题。

当前,您的代码检查字符串
null是动物
是动物
(注意您的空格输入错误?)

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

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

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



您还可以使用
子字符串
索引of
的组合来提取动物名称

您目前遇到的问题是什么?不起作用,我不知道为什么?!这无助于任何人回答您的问题……请更详细地描述一下“动物”是一个空字符串,当用户输入“是一个单词”时,我想从他那里得到它“是一个单词”我想得到那个单词,怎么做???我不明白,请更新你的问题(举个例子,比如你想要什么输出)我会使用
endsWith
因为“是一个动物”谢谢你,伙计,我真的是认真的,我永远不会想到这个,你太棒了:)
"Is ([A-Za-z ]+) an animal?" 
"([A-Za-z ]+) is an animal"