-1

我正在尝试创建一个名为的静态方法findOccurrences(),它接受一个String名为subString. 首先,该方法必须提示用户输入带有.txt扩展名的文件的路径名,然后用于创建File对象。然后该方法需要在该文件上打开一个流。subString随后,该方法必须一次从流中读取一行,并且对于每一行,该方法需要将字符串参数在该行中出现的次数打印到标准输出。

该方法的示例输出应如下所示:

The substring "FRED" occurs 2 times in line 1
The substring "FRED" occurs 1 times in line 2
The substring "FRED" occurs 4 times in line 3
The substring "FRED" occurs 0 times in line 4

该方法需要确保当while循环终止时,文件中的所有行都已被读取。保存文件当前行的字符串应转换为大写。在另一个循环中,该方法需要确定其参数(转换为大写)作为当前行中的子字符串出现的次数。因此,例如,如果当前行包含字符串“BRITAIN POSSESSES TALENT”,搜索子字符串“SSES”应该会出现两次。

现在,我尽了最大努力,并为所需的方法开发了下面的代码。但不幸的是,每次我编译它时,编译器都会抛出一个错误:foreach not applicable to expression type这就是我卡住的地方!所以我只是想知道你们是否可以帮助找出我哪里出错了。

以下是我开发的完整代码:

public static void countOccurrences (String subString)
{
   OUDialog.alert("Please choose a file to search");
   String pathname = OUFileChooser.getFilename();
   File aFile = new File(pathname);
   BufferedReader bufferedFileReader = null;

   int numOfOccurrencesInLine;
   int lineNumber = 0;
   int lineIndex;
   subString = subString.toUpperCase();
   String currentLine;
   try
   {
      bufferedFileReader = new BufferedReader(new FileReader(aFile));
      currentLine = bufferedFileReader.readLine();
      while (currentLine != null)
      {
         currentLine = bufferedFileReader.readLine();
         currentLine.toUpperCase();
         lineIndex = currentLine.indexOf(subString, lineNumber);
         subString = currentLine.substring(lineIndex);
         numOfOccurrencesInLine = 0;
         for (int eachOccurrence : currentLine)
         {
            numOfOccurrencesInLine = numOfOccurrencesInLine + eachOccurrence;
            System.out.println("The substring " + subString + "occurs 2 times in line " + lineNumber);
         }
      }
   }
   catch (Exception anException)
   {
      System.out.println("Error: " + anException);
   }
   finally
   {
      try
      {
         bufferedFileReader.close();
      }
      catch (Exception anException)
      {
         System.out.println("Error: " + anException);
      }
   }
} 

感谢你们。

4

1 回答 1

0

除了您确实应该将这些功能拆分为单个方法这一事实之外,您使用的是foreach错误的。您正在遍历一个String[]数组,因此您需要将 'int eachOccurrence' 更改为String eachOccurrence.
编辑:您实际上并没有遍历数组。您想遍历 a String,但String没有实现Iterable.
你真的应该拿一本像样的编程书。再次仔细阅读您的代码后,有几个错误。例如,你读了你的行两次,覆盖了第一个读行。因此,只需留下第二个currentLine = bufferedFileReader.readLine();(检查后的那个null)。

于 2013-01-05T17:52:14.610 回答