Q&A
###前提・実現したいこと
javaでBM法を用いた文字列探索を実現したいです。
###発生している問題・エラーメッセージ
以下のソースコードをどうしてもコンパイルできず、次のエラーが出ます。自分では調べました。
どこを直せばよいかご教授よろしくお願いいたします。
javac -encoding utf-8 BM.java
BM.java:1: エラー: '\ufeff'は不正な文字です
?import java.util.Scanner;
^
BM.java:1: エラー: class、interfaceまたはenumがありません
?import java.util.Scanner;
###該当のソースコード
import java.util.Scanner;
public class BM{
static int bmMatch(String txt, String pat) {
int pt;
int pp;
int txt_len = txt.length();
int pat_len = pat.length();
int[] skip = new int[Character.MAX_VALUE + 1];
int count = 0;
int k = -1;
for (pt = 0; pt <= Character.MAX_VALUE; pt++) skip[pt] = pat_len; for (pt = 0; pt < pat_len - 1; pt++) skip[pat.charAt(pt)] = pat_len - pt - 1; while (pt < txt_len) { pp = pat_len - 1; if (k == pt - pp); else { k = pt - pp; } for (int i = 0; i < txt.length(); i++); for (int i = 0; i < pt * 2 + 4; i++); for (int i = 0; i < (pt-pp) * 2 + 4; i++); for (int i = 0; i < pat.length(); i++); count++; while (txt.charAt(pt) == pat.charAt(pp)) { if (pp == 0) return pt; pp--; pt--; if (k == pt - pp); else { k = pt - pp; } for (int i = 0; i < txt.length(); i++); for (int i = 0; i < pt * 2 + 4; i++); for (int i = 0; i < (pt-pp) * 2 + 4; i++); for (int i = 0; i < pat.length(); i++); count++; } pt += skip[txt.charAt(pt)]; } return -1;
}
public static void main(String[] args) {
Scanner stdIn = new Scanner(System.in);
System.out.print("テキスト:"); String s1 = stdIn.next(); System.out.print("パターン:"); String s2 = stdIn.next(); int idx = bmMatch(s1, s2); if (idx == -1); else { int len = 0; for (int i = 0; i < idx; i++) len += s1.substring(i, i + 1).getBytes().length; len += s2.length(); System.out.println((idx + 1) + "文字目にマッチします。"); System.out.println("テキスト:" + s1); System.out.printf(String.format("パターン:%%%ds\n", len), s2); }
}
}
###試したこと
課題に対してアプローチしたことを記載してください
###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
回答1件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
退会済みユーザー
2016/07/29 14:04