我正在尝试创建一个名为的静态方法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);
}
}
}
感谢你们。