首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java搜索文件

Java搜索文件
EN

Stack Overflow用户
提问于 2017-04-25 03:44:50
回答 1查看 29关注 0票数 1

我有两个字符串变量:

"givenAccnt“是从用户获得的输入字符串。

"accntToken“是一行文本的子字符串(第一个字符串)。

如果givenAccnt 等于 accntToken,我希望返回与accntToken匹配的文本行。

此外,可能有超过1匹配的情况。我希望将所有匹配保存到一个变量中,然后立即返回这些匹配(行)。

下面的代码只返回最后一行的匹配。(如果匹配在其他行,它就会错过)

我似乎不明白它为什么会那样做。

任何帮助都将不胜感激。

代码语言:javascript
复制
givenAccnt = searchTextField.getText();//else, user is using search field to get given account
try
   {
      scanner = new Scanner(file);        //initialize scanner on file
      while(scanner.hasNextLine())        //while lines are being scanned
      {   
         getLine = scanner.nextLine();          //gets a line
         int i = getLine.indexOf(' ');          //get first string-aka-accnToken
         accntToken = getLine.substring(0, i);    
       }
       if(givenAccnt.equals(accntToken))   //if match   
       {
          collectedLines = new StringBuilder().append(getLine).toString();
          psswrdLabels = new JLabel(collectedLines, JLabel.LEFT);
          psswrdLabels.setAlignmentX(0);
          psswrdLabels.setAlignmentY(0);
          fndPwrdsCNTR += 1;     //counter for number of passwords found 
          JOptionPane.showMessageDialog(null, psswrdLabels ,+fndPwrdsCNTR+" PASSWORD(S) FOUND!", JOptionPane.INFORMATION_MESSAGE);    //shows window with matched passwords (as JLabels)
                            searchTextField.setText("");    //clears search field, if it was used
         }else
           //..nothing found
     }catch (FileNotFoundException ex) {
         //..problem processing file...
                    } 
EN

回答 1

Stack Overflow用户

发布于 2017-04-25 04:12:58

不能在每一行上创建新的StringBuilder。相反,在阅读行之前创建它。守则:

代码语言:javascript
复制
givenAccnt = searchTextField.getText();//else, user is using search field to get given account
try
   {
builder=new StringBuilder();//initialize builder to store matched lines
      scanner = new Scanner(file);        //initialize scanner on file
      while(scanner.hasNextLine())        //while lines are being scanned
      {   
         getLine = scanner.nextLine();          //gets a line
         int i = getLine.indexOf(' ');          //get first string-aka-accnToken
         accntToken = getLine.substring(0, i);    
       }
       if(givenAccnt.equals(accntToken))   //if match   
       {
          collectedLines = builder.append(getLine).toString();
          psswrdLabels = new JLabel(collectedLines, JLabel.LEFT);
          psswrdLabels.setAlignmentX(0);
          psswrdLabels.setAlignmentY(0);
          fndPwrdsCNTR += 1;     //counter for number of passwords found 
          JOptionPane.showMessageDialog(null, psswrdLabels ,+fndPwrdsCNTR+" PASSWORD(S) FOUND!", JOptionPane.INFORMATION_MESSAGE);    //shows window with matched passwords (as JLabels)
                            searchTextField.setText("");    //clears search field, if it was used
         }else
           //..nothing found
     }catch (FileNotFoundException ex) {
         //..problem processing file...
                    } 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43601220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档