Java 如何找到文件夹中每个单词的位置?
我正在尝试实现一个程序,将所有单词及其位置保存在给定文件夹的文件中。例如,有一个方法Java 如何找到文件夹中每个单词的位置?,java,data-structures,Java,Data Structures,我正在尝试实现一个程序,将所有单词及其位置保存在给定文件夹的文件中。例如,有一个方法wordLoc(文件夹),它将父文件夹作为参数。我使用递归方法遍历父文件夹 然后我试图保存树映射中每个单词的位置,其中关键字是单词,值是单词位置对象的集合: WordLocation是一个具有字段路径、行、列的类: public class WordLocation { private String path; private int row; private int column;
wordLoc(文件夹)
,它将父文件夹作为参数。我使用递归方法遍历父文件夹
然后我试图保存树映射中每个单词的位置,其中关键字是单词,值是单词位置对象的集合:
WordLocation是一个具有字段路径、行、列的类:
public class WordLocation {
private String path;
private int row;
private int column;
public WordLocation(String path, int row, int column) {
this.path = path;
this.row = row;
this.column = column;
}
}
我的方法如下所示:
private void wordLoc(File file) throws IOException {
if(file.isFile()) {
BufferedReader br = new BufferedReader(new FileReader(file));
int ch;
int row = 1, column = 0;
String word = "";
do {
ch = br.read();
column++;
if(ch == '\n'){
row++;
column = 0;
} else if(isValid((char)ch)) {
word += (char)ch;
} else {
if (word.length() > 0) {
WordLocation location = new WordLocation(file.getPath(), row, column-word.length());
// MAPPING OF WORD AND LOCATION GOES HERE
word = "";
}
}
} while (ch != -1);
br.close();
}
}
这里的Helper方法isValid(char ch)
只检查我的字符是否有效(字母数字值):
另外,我对剩下的部分有一个想法:遍历地图,看看搜索到的单词是否等于地图中的单词,如果是,我会遍历给定单词的所有位置,然后简单地打印出来。看起来您想将一个单词(如“Tokyo”)映射到WordLocation对象的列表中。那么,让我们这样做:
private final Map<String, List<WordLocation>> locations = new HashMap<>();
这将从Tokyo获取关联的值,如果没有,将返回一个空列表(这避免了以后必须写入空检查)。然后你想做什么就做什么。它可能是空的。看起来像是要将一个单词(如“Tokyo”)映射到WordLocation对象的列表。那么,让我们这样做:
private final Map<String, List<WordLocation>> locations = new HashMap<>();
这将从Tokyo获取关联的值,如果没有,将返回一个空列表(这避免了以后必须写入空检查)。然后你想做什么就做什么。它可能是空的。它不会仍然给出单词的错误位置吗?现在它显示了文件中所有可能的位置,并将它们映射到每个单词。当我查找Tokyo时,它确实显示了所有可能的位置。您的“查找单词”代码有点可疑,但您的问题不是关于这一点,而是关于如何进行映射。您的“查找单词”代码有缺陷这一事实可能最好留给另一个问题来解决。不知道我问了“如何在文件夹中查找每个单词的位置?”xD。关于如何映射,我指的是映射单词和正确的位置。不过,非常感谢!它不会仍然给出一个词的错误位置吗?现在它显示了文件中所有可能的位置,并将它们映射到每个单词。当我查找Tokyo时,它确实显示了所有可能的位置。您的“查找单词”代码有点可疑,但您的问题不是关于这一点,而是关于如何进行映射。您的“查找单词”代码有缺陷这一事实可能最好留给另一个问题来解决。不知道我问了“如何在文件夹中查找每个单词的位置?”xD。关于如何映射,我指的是映射单词和正确的位置。不过,非常感谢!
private final Map<String, List<WordLocation>> locations = new HashMap<>();
map.putIfAbsent(word, w -> new ArrayList<WordLocation>()).add(location);
List<WordLocation> locations = map.getOrDefault("Tokyo", List.of());
for (WordLocation loc : locations) {
System.out.println(" " + loc);
}