我正在尝试在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
也是文件中的第一个字符。
这是执行后的结果。
对此有何帮助?
答案 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)
您的代码存在多个问题:
while(sc.hasNextLine()) { totalLines++; sc.nextLine(); System.out.println("Line looping! For Total Lines variable."); }
所以在此之后你必须再次重置它以阅读进一步处理。
在搜索字符时,您有两个循环:
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;
}
}
这里你只需要一个循环:
while(sc.hasNextLine()) { String characterInLine = sc.nextLine(); if(characterInLine.indexOf(character) != -1) { found = true; break; } }