我正在尝试在java中的文件中搜索字符串,这就是我试过的。在下面的程序中我得到输出为No Data Found,我确信该文件有我正在搜索的单词
import java.io.*;
import java.util.Scanner;
public class readfile {
static String[] list;
static String sear = "CREATE";
public void search() {
Scanner scannedFile = new Scanner("file.txt");
while (scannedFile.hasNext()) {
String search = scannedFile.next();
System.out.println("SEARCH CONTENT:"+search);
if (search.equalsIgnoreCase(sear)) {
System.out.println("Found: " +search);
}
else {
System.out.println("No data found.");
}
}
}
public static void main (String [] args) throws IOException {
readfile read = new readfile();
read.search();
}
}
答案 0 :(得分:0)
不要这样做:
search.equalsIgnoreCase(sear)
尝试:
search.toUpperCase().contains(sear)
我认为搜索是文件的整个字符串,所以你永远不会用等号来实现。
答案 1 :(得分:0)
好的,这是我对你的计划的理解。
您在文件file.txt
中搜索单词CREATE
。
为此,您需要阅读文件中的每个单词,如果是CREATE
则打印Found create
。
此处的问题是,对于文件中的每个字词,如果不是CREATE
,则会打印No data found
。
相反,您应该等待文件的结尾,然后如果您没有找到它,您将打印错误消息。
答案 2 :(得分:0)
使用nextLine()而不是next()然后使用split。像这样:
What's the difference between next() and nextLine() methods from Scanner class?
差异:
next()只能读取输入直到空格。它无法读取由空格分隔的两个单词。此外,next()在读取输入后将光标放在同一行。
nextLine()读取包含单词之间空格的输入(即,读取直到行尾\ n)。读取输入后,nextLine()将光标定位在下一行。
使用以下代码:
String search = scannedFile.nextLine();
String[] pieces = data.split("\\s+");
for(int i=0; i<pieces.length(); i++)
{
if(pieces[i].equalsIgnoreCase(sear))
{
System.out.println("Found: " +search);
}
else
{
System.out.println("No data found.");
}
}
答案 3 :(得分:0)
试试这个:
import java.io.*;
import java.util.ArrayList;
import java.util.List;
public class readfile {
static String[] list;
static String sear = "CREATE";
public void search() throws IOException {
List<String> saveAllLinesForRewriting = new ArrayList<String>();
// Need to read file line by line
BufferedReader bufferedReader = new BufferedReader(new FileReader("file.txt"));
String saveLine;
while ((saveLine = bufferedReader.readLine()) != null) {
saveAllLinesForRewriting.add(saveLine);
}
bufferedReader.close();
// Check if your word exists
if (saveAllLinesForRewriting.toString().contains(sear)) {
System.out.println("Found: " + sear);
} else {
System.out.println("No data found.");
}
}
public static void main(String[] args) throws IOException {
readfile read = new readfile();
read.search();
}
}
答案 4 :(得分:0)
不是使用扫描仪读取文件,而是首先通过添加以下行来创建要读取的文件资源
File file = new File("Full Path of file location");
前
Scannner scannedfile = new Scanner("file.txt");
并将上面的行更改为
Scanner scannedfile = new Scanner(file);
休息你的代码工作正常。
答案 5 :(得分:0)
问题是扫描程序正在扫描String“file.txt”而不是文件。
要解决这个问题,你必须做amit28所说的。您的最终代码如下
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Scanner;
public class readfile {
static String[] list;
static String sear = "CREATE";
public void search() {
File f = new File("file.txt");
Scanner scannedFile;
try {
scannedFile = new Scanner(f);
while (scannedFile.hasNext()) {
String search = scannedFile.next();
System.out.println("SEARCH CONTENT:"+search);
if (search.equalsIgnoreCase(sear)) {
System.out.println("Found: " +search);
}
else {
System.out.println("No data found.");
}
}
} catch (FileNotFoundException e) {
// FIXME Auto-generated catch block
e.printStackTrace();
}
}
public static void main (String [] args) throws IOException {
readfile read = new readfile();
read.search();
}
}