首页 > 解决方案 > 使用拆分在文件中搜索

问题描述

我有一个带有一些注册表的 users1.txt,例如:basketball president tom@gmail.com 1234我让用户输入电子邮件、密码和微调器的两个选项,我想在文件中搜索它们并比较它们,如果它是真的,我会打印一条消息(open() 函数)。在下面的代码中,条件成功但仅针对文件的第一行,我想检查用户的每个输入的所有文件。更具体地说,我希望搜索不要停止,basketball president tom@gmail.com 1234而是继续到第二行football referee tam@gmail.com 123123等,直到文件结束。任何建议都会很棒。

signBtn.setOnClickListener(new View.OnClickListener() {
        @Override
     public void onClick(View view) {

                if( TextUtils.isEmpty(email.getText()))
                    email.setError("Email Required");

               else if( TextUtils.isEmpty(password.getText()))
                    password.setError("Password Required");

               else {


                   String text = readFromFile("users1.txt");
                        String[] splited = text.split("\\s+");


   if(SportSpinner.getSelectedItem().toString().equals(splited[0]) && (UserSpinner.getSelectedItem().toString().equals(splited[1])) && (password.getText().toString().equals(splited[3])) && (email.getText().toString().equals(splited[2])))
         open(SportSpinner.getSelectedItem().toString(), UserSpinner.getSelectedItem().toString());
                      else
                      {
                          if(tries==1)
                              open();

                       signBtn.startAnimation(shakeAnimation);
                       tries--;
                       message(tries);
                      }

                }

            }
        });

    }

    private String readFromFile(String name){
    StringBuilder text = new StringBuilder();
        try {
            File file = new File(getFilesDir().getAbsolutePath(),name);
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;
            while ((line = br.readLine()) != null) {
                text.append(line);
                text.append('\n');
            }
            br.close();
        }catch(IOException e){
            Log.e("Exception", "File read failed: " + e.toString());
        }
        return String.valueOf(text);
    }

标签: javaandroidfile

解决方案


如果文件的行总是在相同编号的集合中,您可以使用循环来增加您检查的索引。如果您找到它,我还会添加某种标志以停止搜索。

    boolean found = false;
    for (int i = 0; i <= splitted.length-3 && !found; i += 4) {
        if(SportSpinner.getSelectedItem().toString().equals(splited[i]) && (UserSpinner.getSelectedItem().toString().equals(splited[i+1])) && (password.getText().toString().equals(splited[i+3])) && (email.getText().toString().equals(splited[i+2]))) {
        found = true;

        // Your open method goes here
        }
    }
    if (!found) {
    // Now put all the code from the previous else statement here, since it has now searched the whole list for the one set of inputs
    }

这会检查文件的每一行是否匹配,如果匹配则退出循环。


推荐阅读