我希望用户逐个输入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");
}
}
}
答案 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 animal
和is 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
您还可以使用substring
和indexOf
的组合来提取动物名称