这个文件扫描程序代码出了什么问题?

时间:2014-05-27 12:18:07

标签: java

我正在尝试在File中搜索Java语言中的字符。为此我使用Scanner来扫描文件。

检查Heirarchy的工作,我正在使用System.out.print("Worked till here!");,以便我可以检查它是否被执行。我能够执行代码直到最后一个阶段,但后来我发现基本boolean变量没有被改变,这是在检查是否存在字符匹配的条件下。

文件内容为

  

好的,这是一些文字!

     

实际上,创建此文件是为了测试java应用程序的有效性

     

Java是我最喜欢的编程语言。

     

而且我认为我可以得分更多:)

     祝你好运!

然而,无论我搜索什么,它总是提示我false

以下是我正在使用的代码

public static void main (String[] args) throws IOException {
    // Only write the output here!!!
    System.out.print("Write the character to be found in the File: ");
    Scanner sc = new Scanner(System.in);
    String character = sc.next();
    // Find the character
    System.out.println("Searching now...");
    getCharacterLocation(character);
    // Close the resource!
    sc.close();

}

执行方法调用,方法为

public static void getCharacterLocation (String character) throws IOException {
    System.out.println("File found...");
    File file = new File("res/File.txt");
    Scanner sc = new Scanner(file);
    int lineNumber = 0;
    int totalLines = 0;
    boolean found = false;
    // First get the total number of lines
    while(sc.hasNextLine()) {
        totalLines++;
        sc.nextLine();
        System.out.println("Line looping! For Total Lines variable.");
    }
    int[] lineNumbers = new int[totalLines];
    int lineIndex = 0;
    System.out.println("Searching in each line...");
    while(sc.hasNextLine()) {
        // Until the end
        /* Get each of the character, I mean string from
         * each of the line... */
        while(sc.hasNext()) {
            // Until the end of line
            String characterInLine = sc.next();
            if(sc.findInLine(character) != null) {
                found = true;
            }
        }
        System.out.print(sc.nextLine() + "\n");
        lineNumber++;
        sc.nextLine();
    }
    System.out.println("Searching complete, showing results...");
    // All done! Now post that.
    if(found) {
        // Something found! :D
        System.out.print("Something was found!");
    } else {
        // Nope didn't found a fuck!
        System.out.println("Sorry, '" + character + 
                    "' didn't match any character in file.");
    }
    sc.close();
}

别介意使用变量和数组。如果我可以获取角色并将值设置为true,我会在进一步编码中使用它。

这是该程序的输出。

初始阶段

这是初期阶段。我在输入字段中写了Ok,你可以看到Ok也是文件中的第一个字符。

enter image description here

最后阶段

这是执行后的结果。

enter image description here

对此有何帮助?

4 个答案:

答案 0 :(得分:1)

您计算线条并且不要重新启动扫描仪。

boolean found = false;
// First get the total number of lines
while(sc.hasNextLine()) {
    totalLines++;
    sc.nextLine();
    System.out.println("Line looping! For Total Lines variable.");
}
int[] lineNumbers = new int[totalLines];
int lineIndex = 0;
System.out.println("Searching in each line..."); // <------
while(sc.hasNextLine()) {

添加例如

从评论

更新
sc.close();
sc = new Scanner(file); 

在下一个while(sc.hasNextLine())

之前

答案 1 :(得分:0)

您需要实现一种将字符串在一起的方法,并根据您的输入进行检查。您似乎无法在代码中执行此操作。

尝试使用扫描仪构建一个字符数组,然后检查输入与索引之间的关系。或者也许有一种方法可以实现tonkenizer类实现这一目标。

请记住,你要找的不是一个字符,它是一个字符串,你需要在编写代码时记住这一点。

答案 2 :(得分:0)

在计算行数时,使用while(sc.hasNextLine())。 在此循环之后,您的扫描仪位于最后一行的后面,因此当您转到下一个循环while(sc.hasNextLine()) {时,它永远不会被执行。

答案 3 :(得分:0)

您的代码存在多个问题:

  1. 您在此处通过扫描仪进行了迭代:
  2.  while(sc.hasNextLine()) {
            totalLines++;
            sc.nextLine();
            System.out.println("Line looping! For Total Lines variable.");
        }
    

    所以在此之后你必须再次重置它以阅读进一步处理。

    1. 在搜索字符时,您有两个循环:

      while(sc.hasNextLine()) {
      // Until the end
      /* Get each of the character, I mean string from
       * each of the line... */
      while(sc.hasNext()) {
          // Until the end of line
          String characterInLine = sc.next();
          if(sc.findInLine(character) != null) {
              found = true;
          }
      }
      

      这里你只需要一个循环:

    2.   while(sc.hasNextLine()) {
            String characterInLine = sc.nextLine();
            if(characterInLine.indexOf(character) != -1) {
              found = true;
              break;
            }
         }