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"