在文件中查找一定数量的子字符串 Java
Look for an amount of substring in a file Java
我正在寻找文件中的一定数量的子串
简而言之,该文件包含一定数量的文章,我需要知道有多少。
每篇文章以:@ARTICLE{
或使用@ARTICLE{(整数系列)
有用信息:
- 我有 10 个文件要查看
- 没有文件是空的
- 这段代码给我一个 StringIndexOutOfBounds 异常
这是我目前的代码:
//To read through all files
for(int i=1; i<=10; i++)
{
try
{
//To look through all the bib files
reader = new Scanner(new FileInputStream("C:/Assg_3-Needed-Files/Latex"+i+".bib"));
System.out.println("Reading Latex"+i+".bib->");
//To read through the whole file
while(reader.hasNextLine())
{
String line = reader.nextLine();
String articles = line.substring(1, 7);
if(line.equals("ARTICLE"))
count+=1;
}
}
catch(FileNotFoundException e)
{
System.err.println("Error opening the file Latex"+i+".bib");
}
}
System.out.print("\n"+count);
尝试在每行中使用 String#contains
:
while(reader.hasNextLine()) {
String line = reader.nextLine();
if (line.contains("ARTICLE")) {
count += 1;
}
}
这至少可以解决首先必须采用子字符串的问题。问题是虽然匹配的行不应该有越界异常,也不应该有超过 7 个字符的行不匹配,但少于 7 个字符的行会导致问题。
您还可以使用正则表达式模式来确保将 ARTICLE
作为一个独立的词进行匹配:
while(reader.hasNextLine()) {
String line = reader.nextLine();
if (line.matches("\bARTICLE\b")) {
count += 1;
}
}
这将确保您不会计算其中包含 articles
之类内容的行,这不是您的确切目标。
您可以检查行是否以需要的顺序开头:
if (line.startsWith("ARTICLE")) {
count += 1;
}
您将从这行代码中获取 StringIndexOutOfBounds:
String articles = line.substring(1, 7);
读入的行可以为空或少于 7 个字符。为避免获得 StringIndexOutOfBounds,您应该进行条件检查以查看
line.length > 7
除此之外,最好使用上面推荐的答案(即 .contains 或 .startsWith)
由于您是逐行阅读,所以 string.contains 是替代子字符串的不错选择,另一方面,所有文章都以 "@ARTICLE" 开头,因此在条件中使用 "@ARTICLE"。对于代码测试,请尝试这个 -
public class test {
public static void main(String[] args) {
int count = 0;
for (int i = 1; i <= 10; i++) {
try {
//To look through all the bib files
Scanner reader = new Scanner(new FileInputStream("C:/Assg_3-Needed-Files/Latex" + i + ".bib"));
System.out.println("Reading Latex" + i + ".bib->");
//To read through the whole file
while (reader.hasNextLine()) {
String line = reader.nextLine();
if (line.contains("@ARTICLE")) {
count += 1;
}
}
} catch (FileNotFoundException e) {
System.err.println("Error opening the file Latex" + i + ".bib");
}
}
System.out.print("\n" + count);
} }
我正在寻找文件中的一定数量的子串 简而言之,该文件包含一定数量的文章,我需要知道有多少。 每篇文章以:@ARTICLE{ 或使用@ARTICLE{(整数系列)
有用信息: - 我有 10 个文件要查看 - 没有文件是空的 - 这段代码给我一个 StringIndexOutOfBounds 异常
这是我目前的代码:
//To read through all files
for(int i=1; i<=10; i++)
{
try
{
//To look through all the bib files
reader = new Scanner(new FileInputStream("C:/Assg_3-Needed-Files/Latex"+i+".bib"));
System.out.println("Reading Latex"+i+".bib->");
//To read through the whole file
while(reader.hasNextLine())
{
String line = reader.nextLine();
String articles = line.substring(1, 7);
if(line.equals("ARTICLE"))
count+=1;
}
}
catch(FileNotFoundException e)
{
System.err.println("Error opening the file Latex"+i+".bib");
}
}
System.out.print("\n"+count);
尝试在每行中使用 String#contains
:
while(reader.hasNextLine()) {
String line = reader.nextLine();
if (line.contains("ARTICLE")) {
count += 1;
}
}
这至少可以解决首先必须采用子字符串的问题。问题是虽然匹配的行不应该有越界异常,也不应该有超过 7 个字符的行不匹配,但少于 7 个字符的行会导致问题。
您还可以使用正则表达式模式来确保将 ARTICLE
作为一个独立的词进行匹配:
while(reader.hasNextLine()) {
String line = reader.nextLine();
if (line.matches("\bARTICLE\b")) {
count += 1;
}
}
这将确保您不会计算其中包含 articles
之类内容的行,这不是您的确切目标。
您可以检查行是否以需要的顺序开头:
if (line.startsWith("ARTICLE")) {
count += 1;
}
您将从这行代码中获取 StringIndexOutOfBounds:
String articles = line.substring(1, 7);
读入的行可以为空或少于 7 个字符。为避免获得 StringIndexOutOfBounds,您应该进行条件检查以查看
line.length > 7
除此之外,最好使用上面推荐的答案(即 .contains 或 .startsWith)
由于您是逐行阅读,所以 string.contains 是替代子字符串的不错选择,另一方面,所有文章都以 "@ARTICLE" 开头,因此在条件中使用 "@ARTICLE"。对于代码测试,请尝试这个 -
public class test {
public static void main(String[] args) {
int count = 0;
for (int i = 1; i <= 10; i++) {
try {
//To look through all the bib files
Scanner reader = new Scanner(new FileInputStream("C:/Assg_3-Needed-Files/Latex" + i + ".bib"));
System.out.println("Reading Latex" + i + ".bib->");
//To read through the whole file
while (reader.hasNextLine()) {
String line = reader.nextLine();
if (line.contains("@ARTICLE")) {
count += 1;
}
}
} catch (FileNotFoundException e) {
System.err.println("Error opening the file Latex" + i + ".bib");
}
}
System.out.print("\n" + count);
} }