正在检查文件 java 中的重复字符串
Checking for duplicate string in file java
我有一个文件,我正在向其中写入数据。我试过谷歌搜索,但我试过的所有例子都让我更加困惑。
我正在将数据输入到一个文件中,这是正确发生的,所选项目被附加到文件中。我的问题是,我想检查文件中是否已经存在输入的字符串,如果存在,我想跳过它。
我用来将数据输入文件的代码如下,但我不确定如何更改它以检查重复项。
for (EventsObj p : boxAdapter.getBox()) {
if (p.box){
String result = p.name + " " + p.price;
try {
// open file for writing
OutputStreamWriter out= new OutputStreamWriter(openFileOutput("UserEvents.txt",MODE_APPEND));
// write the contents to the file
out.write(result);
out.write('\n');
// close the file
out.close();
}
catch (java.io.IOException e) {
//do something if an IOException occurs.
Toast.makeText(this, "Sorry Text could't be added", Toast.LENGTH_LONG).show();
}
}
}
它正在勾选复选框,然后获取与之相关的名称和价格并将其附加到文件中。但是我想检查一下这还不存在。任何帮助将不胜感激,我已经筋疲力尽 google 并尝试了很多东西。
您应该首先从文件中读取并创建包含所有输入的字符串列表。
然后在添加到文件之前,您可以检查字符串列表是否包含您要添加的字符串(只需确保字符串共享相同的格式以便找到匹配项)。如果 returns false 添加到文件,如果是则不添加到文件。
不应该是一项如此艰巨的任务。您可以使用 contains 方法。
所以,如果我正确理解了你的问题,该文件包含许多由换行符分隔的字符串。
您要做的是逐行读取文件内容,并将这些行存储在 HashSet 中。然后,您打开要追加的文件并追加附加字符串,但前提是该文件尚未包含该字符串。正如其他答案所建议的那样,您使用 contains 方法。但是,与其他答案不同,我不建议使用字符串列表;相反,我建议使用 HashSet,因为它更高效。
在逐行读取文件内容时,您可以执行一些基本检查:文件是否已包含重复行?您可能希望通过向用户发出文件格式无效的警告来处理这些问题。或者您可能仍想继续。
您可能需要在程序中将文件内容保存在字符串中。效率有点低,但目前我看不到任何其他方法,只能跟踪程序中的内容而不是文件中的内容。
因此,在您 运行 将文本附加到文件的程序之前,您应该做的第一件事可能是解析文件中的所有文本:
File yourFile = new File("file-path-goes-here");
Scanner input = null;
try {
input = new Scanner (new FileInputStream(yourFile) );
}
catch (FileNotFoundException e) {;;;}
String textFromFile = "";
while (input.hasNextLine())
textFromFile += input.nextLine() + "\n";
//Now before adding to the file simply run something like this
if(textFromFile.indexOf("string-to-write-to-file") != -1)
;//do not write to file
else {
;//write to file and add to textFromFile
textFromFile += "string-you-added-to-file" + "\n";
}
希望这能回答您的问题。如果有什么不清楚的地方,请告诉我。
我有一个文件,我正在向其中写入数据。我试过谷歌搜索,但我试过的所有例子都让我更加困惑。 我正在将数据输入到一个文件中,这是正确发生的,所选项目被附加到文件中。我的问题是,我想检查文件中是否已经存在输入的字符串,如果存在,我想跳过它。 我用来将数据输入文件的代码如下,但我不确定如何更改它以检查重复项。
for (EventsObj p : boxAdapter.getBox()) {
if (p.box){
String result = p.name + " " + p.price;
try {
// open file for writing
OutputStreamWriter out= new OutputStreamWriter(openFileOutput("UserEvents.txt",MODE_APPEND));
// write the contents to the file
out.write(result);
out.write('\n');
// close the file
out.close();
}
catch (java.io.IOException e) {
//do something if an IOException occurs.
Toast.makeText(this, "Sorry Text could't be added", Toast.LENGTH_LONG).show();
}
}
}
它正在勾选复选框,然后获取与之相关的名称和价格并将其附加到文件中。但是我想检查一下这还不存在。任何帮助将不胜感激,我已经筋疲力尽 google 并尝试了很多东西。
您应该首先从文件中读取并创建包含所有输入的字符串列表。 然后在添加到文件之前,您可以检查字符串列表是否包含您要添加的字符串(只需确保字符串共享相同的格式以便找到匹配项)。如果 returns false 添加到文件,如果是则不添加到文件。
不应该是一项如此艰巨的任务。您可以使用 contains 方法。
所以,如果我正确理解了你的问题,该文件包含许多由换行符分隔的字符串。
您要做的是逐行读取文件内容,并将这些行存储在 HashSet
在逐行读取文件内容时,您可以执行一些基本检查:文件是否已包含重复行?您可能希望通过向用户发出文件格式无效的警告来处理这些问题。或者您可能仍想继续。
您可能需要在程序中将文件内容保存在字符串中。效率有点低,但目前我看不到任何其他方法,只能跟踪程序中的内容而不是文件中的内容。 因此,在您 运行 将文本附加到文件的程序之前,您应该做的第一件事可能是解析文件中的所有文本:
File yourFile = new File("file-path-goes-here");
Scanner input = null;
try {
input = new Scanner (new FileInputStream(yourFile) );
}
catch (FileNotFoundException e) {;;;}
String textFromFile = "";
while (input.hasNextLine())
textFromFile += input.nextLine() + "\n";
//Now before adding to the file simply run something like this
if(textFromFile.indexOf("string-to-write-to-file") != -1)
;//do not write to file
else {
;//write to file and add to textFromFile
textFromFile += "string-you-added-to-file" + "\n";
}
希望这能回答您的问题。如果有什么不清楚的地方,请告诉我。