从文本文件中搜索字符串(不区分大小写)

时间:2016-04-09 15:42:46

标签: java swing jframe

我正在用Java写论文。我一度陷入困境。我无法从文件中搜索字符串。我需要从文件中搜索用户输入的单词,即使文件中的字符串是“F”并且他输入“f”我得得到响应。这样做的最佳方法是什么?这是实现这种事情的最好方法吗?如果我错了,可能最好使用ArrayList纠正我。

这是我到目前为止所做的:

 JButton btnTuletaParoolMeelde = new JButton("Tuleta parool meelde");
 btnTuletaParoolMeelde.setBackground(new Color(37, 209, 175));
 btnTuletaParoolMeelde.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {


            //Search
            String keskkond = textArea.getText();

            if(keskkond.length()<=0){
                System.out.println("You didn't enter anything");
            }else{
               int tokencount;
               FileReader filereader = null;
            try {
                filereader = new FileReader("paroolid.txt");
            } catch (FileNotFoundException e2) {
                // TODO Auto-generated catch block
                e2.printStackTrace();
            }
               BufferedReader br=new BufferedReader(filereader);
               String s;
               int linecount=0;

               String keyword = keskkond; //keskkond is like Facebook etc..

               try {
                while ((s = br.readLine())!=null){
                      if(s.contains(keyword))
                     System.out.println(s);

                   }
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }                                                                             
               }
   }

这是人们可以输入网络和密码然后将其写入文件的地方。

  //Add your password and network and Button actions
  btnLisaParool = new JButton("Add passowrd");
  btnLisaParool.setBackground(new Color(37, 209, 175));
  btnLisaParool.addActionListener(new ActionListener() {
   public void actionPerformed(ActionEvent e) {




    String parool = String.valueOf(passwordField.getPassword());
    String koht = textField.getText();
    if (koht.isEmpty() && parool.isEmpty()) {
     lblFeedback.setText("You didn't enter anything.");
    } else if(parool.isEmpty()) {
        lblFeedback.setText("Enter password please!.");
    }else if(koht.isEmpty()){
        lblFeedback.setText("Enter network please!");
    }else{
     FileWriter fWriter = null;
     BufferedWriter writer = null;
     try {
      fWriter = new FileWriter("paroolid.txt", true);
      writer = new BufferedWriter(fWriter);
      writer.write("Teie " + koht + " -i parool oli: " + parool);
      writer.newLine();
      writer.close();
      lblFeedback.setText("Teie " + koht + " parool, mis koosnes " + parool.length() + " tähest, on salvestatud.");

     } catch (Exception e1) {
         lblFeedback.setText("Error: " + "Couldn't find file");
     }

    }
    passwordField.setText("");
    textField.setText("");
   }

4 个答案:

答案 0 :(得分:1)

首先,不要对EDT执行长时间运行的操作(如读/写文件)。其次,请确保释放用于防止内存泄漏的所有资源。要回答您的问题,您可以修改您正在搜索的String和您正在搜索的大写或小写字母。

以下是一个例子:

try(BufferedReader br = new BufferedReader(new FileReader("paroolid.txt"))){
    for(String line; (line = br.readLine()) != null;){
        if(line.toLowerCase().contains(toSearchFor.toLowerCase())){
            System.out.println(line);
        }
    }
}catch(Exception e){
    e.printStackTrace();
}

答案 1 :(得分:0)

首先检查&#34; f&#34;然后检查toUppercase(&#34; f&#34;)

答案 2 :(得分:0)

来自string的

equalsIgnoreCase()方法可以解决您的问题。或者你可以使用

org.apache.commons.lang3.StringUtils.containsIgnoreCase()

如果必须使用contains。

答案 3 :(得分:0)

使用equalsIgnoreCase会使它在测试时不会考虑字母的大小写以确定它们是否相等。

另外,即使没有问过,我也有两点建议:

而不是:

try {
     filereader = new FileReader("paroolid.txt");
     } catch (FileNotFoundException e2) {
       // TODO Auto-generated catch block
       e2.printStackTrace();
            }

尝试这样做:

try ( br = new BufferedReader(new FileReader("paroolid.txt"))){
         } catch (FileNotFoundException e2) {
           // TODO Auto-generated catch block
           e2.printStackTrace();
                }

这称为try-with-resources语句,将自动关闭文件读取器。您的BufferedReader也可以这样做。

第二个建议是使用Scanner类。除非您明确使用此类,否则最好只使用Scanner类。在您的情况下,它没有任何缺点,更容易使用。