em gà java lắm, các bác giúp em với
thuật toán này so khớp với các mẫu "pattern" mình nhập vào với nội dung file (save ở định dạng unicode)
các bác tạo 1 file text ở desktop chạy thử & nhập mẫu để so với nó
in file ra thì được nhưng đến dòng đưa vào biến s thì bị lỗi
nếu ko đưa file vào mà gán giá trị sẵn cho s thì chạy bthg` =.=
Mã:
package ahofix;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.Reader;
import java.util.Arrays;
import java.util.Scanner;
public class Ahofix {
static final int ALPHABET_SIZE = 26;
Ahofix.Node[] nodes;
int nodeCount;
//Bước 2.Xây dựng hàm Goto Function
public static class Node {
int parent;
char charFromParent;
int suffLink = -1;
int[] children = new int[ALPHABET_SIZE];
int[] transitions = new int[ALPHABET_SIZE];
boolean leaf;
{
Arrays.fill(children, -1);
Arrays.fill(transitions, -1);
}
}
//Bước 3. Xây dựng hàm Failure Function
public Ahofix(int maxNodes) {
nodes = new Ahofix.Node[maxNodes];
// create root
nodes[0] = new Ahofix.Node();
nodes[0].suffLink = 0;
nodes[0].parent = -1;
nodeCount = 1;
}
//Bước 4. Xây dựng hàm Output Function
public void addString(String s) {
int cur = 0;
for (char ch : s.toCharArray()) {
int c = ch - 'a';
if (nodes[cur].children[c] == -1) {
nodes[nodeCount] = new Ahofix.Node();
nodes[nodeCount].parent = cur;
nodes[nodeCount].charFromParent = ch;
nodes[cur].children[c] = nodeCount++;
}
cur = nodes[cur].children[c];
}
nodes[cur].leaf = true;
}
//Bước 5. Thực hiện quá trình Transition
public int suffLink(int nodeIndex) {
Ahofix.Node node = nodes[nodeIndex];
if (node.suffLink == -1)
node.suffLink = node.parent == 0 ? 0 : transition(suffLink(node.parent), node.charFromParent);
return node.suffLink;
}
public int transition(int nodeIndex, char ch) {
int c = ch - 'a';
Ahofix.Node node = nodes[nodeIndex];
if (node.transitions[c] == -1)
node.transitions[c] = node.children[c] != -1 ? node.children[c] : (nodeIndex == 0 ? 0 : transition(suffLink(nodeIndex), ch));
return node.transitions[c];
}
//B6
public String ReadFile(String pathFile) {
try
{
//Tạo một con trỏ để connect đến pathFile
FileInputStream fileInPutStream = new FileInputStream(pathFile.trim());
//Đọc file với Unicode
Reader reader = new java.io.InputStreamReader(fileInPutStream, "Unicode");
//Đọc từng byte
BufferedReader buffReader = new BufferedReader(reader);
//Tạo 1 stringBuilder để lấy từng dòng (line) của file
StringBuilder stringBuilder = new StringBuilder();
String line = null;
while ((line = buffReader.readLine()) != null)
{
//stringBuilder cho phép cộng dồn "append"
stringBuilder.append(line + "
");
}
reader.close();
return stringBuilder.toString();
}
catch(IOException io)
{
System.out.println("File not found ! " + pathFile);
}
return "";
}
public void Process()
{
Ahofix ahoCorasick = new Ahofix(1000);
System.out.println("enter number of patterns:");
Scanner nhap = new Scanner(System.in);
int n=nhap.nextInt();
String q , pattern,s,pathFile;
for(int i=1;i<=n;i++)
{
System.out.println("enter pattern number "+i+" :");
q=nhap.next();
ahoCorasick.addString(q);
}
System.out.println("enter pathfile:");
pathFile=nhap.next();
s=ahoCorasick.ReadFile(pathFile);
//s=nhap.next();
System.out.println(s);
int node = 0;
for (char ch :s.toCharArray()) {
node = ahoCorasick.transition(node, ch);
}
if(ahoCorasick.nodes[node].leaf==true) System.out.println("Match !");
else System.out.println("Not match !");
}
public static void main(String[] args) {
Ahofix ahoCorasick = new Ahofix(1000);
ahoCorasick.Process();}
//C:\\Users\\Dell\\Desktop\\file.txt
}
run:
enter number of patterns:
1
enter pattern number 1 :
bc
enter pathfile:
C:\\Users\\Dell\\Desktop\\file.txt
abc
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -87
at ahofix.Ahofix.transition(Ahofix.java:69)
at ahofix.Ahofix.Process(Ahofix.java:123)
at ahofix.Ahofix.main(Ahofix.java:130)
Java Result: 1
View more random threads:
Trứng rung điều khiển từ xa Vibrator Spark Of Love Sản phẩm trứng rung bluetooth có điều khiển từ xa này được thiết kế với tông màu Rose Gold viền kim khí trải qua. kích tấc 7,4cm x 3,5cm giúp trứng...
TOP 3 trùy rung điều khiển từ xa...