我需要搜索最多 3 个单词,这些单词分别;
位于 Web 服务器上的多个文件中。
代码:
package prueba.de.buscar.dentro.de.un.archivo;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
public class PruebaDeBuscarDentroDeUnArchivo {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
java.util.Scanner scanner = new Scanner(System.in);
System.out.println("Introduce una cadena de texto a buscar: ");
String request = scanner.next();
try {
final BufferedReader reader = new BufferedReader(
new FileReader("C:\\Users\\ProKode\\Downloads\\archivo.txt")
);
String line = "";
while((line = reader.readLine())!= null) {
if(line.indexOf(";")!= -1){
if (line.split(";")[0].equalsIgnoreCase(request)) {
System.out.println("Se encontro la palabra "+ request);
}
}
}
reader.close();
} catch (FileNotFoundException e) {e.printStackTrace();
} catch (IOException e) {e.printStackTrace();}
}
}
但我得到这个错误:
线程中的异常
main
java.lang.ArrayIndexOutOfBoundsException
:0在
prueba.de.buscar.dentro.de.un.archivo.PruebaDeBuscarDentroDeUnArchivo.main(PruebaDeBuscarDentroDeUnArchivo.java:23
)Java 结果:1
构建成功(总时间:10 秒)
这是第 23 行:
if(line.indexOf(";") != -1)
该文件的内容是(这是一个例子):
离开:
输入要搜索的文本字符串:
moises;迭戈;用户
找到了这个词:摩西。
找到了这个词:diego。
找到了这个词:用户。
注意:大写字母无关紧要。
您不应该
ArrayIndexOutOfBoundsException
在指示的行中得到 a,因为在这一行中没有可以抛出一个的方法。如果您更改此代码:
经过
您肯定会得到一个大小 > 0 的数组。
在使用 的搜索中
split
,限制n > 0将结果数限制为n ,如果未找到模式,则n=-1的限制会为您提供所有可能的结果,其中至少包含整个字符串。n=0的行为类似于n=-1,不同之处在于字符串最终会被丢弃。到目前为止,我无法
ArrayIndexOutOfBounds
使用指定部分中的任何代码行复制一个,使用没有“;”的字符串排列 甚至 ””。鉴于我无法重建错误,让我们使用更安全的代码:
以“;”分隔的最多 3 个单词中搜索单词 你用:
更新
随着寻求澄清的问题的更新,必要的代码有所改变:
我使用您也使用的方法(
split
和indexOf
)实现了解决方案。有一种替代方法可以使用正则表达式处理文件的行,Pattern
并且Matcher
会更优雅(基于反馈)。我认为如果您直接查找每一行上的单词会更容易。代替:
尝试这个:
java.lang.ArrayIndexOutOfBoundsException
表示您试图访问不存在的数组位置(负数,或大于数组大小的数字 - 1 *)您尝试访问的索引是
0
,这意味着该数组没有元素 (line.split(";").length == 0
)。发生这种情况是因为该行根本没有任何“;” (可能文件末尾有一个空行)。最正常的事情是检查这些条件;例如。
!line.trim().isEmpty()
在进行拆分之前,除了一个空行 ( )。String[] palabras = line.split(";");
并检查其大小 ( )。palabras.length > 0
在这两种情况下,您应该决定程序的行为方式:您可以忽略该行或通知用户运行时错误(“找到没有';'的行,行内容是” + 行)。
*和 C 一样,数组索引从 0 开始,所以有效值是 from
0
到[tamaño del array - 1]
。