Шановні форумчани.
Програма повинна порівняти частину стрінгової змінної resStr (стрічка з словника) і змінну engWord (слово, що треба перекласти). Так як resStr це ціла стрічка, яка включає слово і його переклад, розділені ";" то я з допомогою substring () беру для порівняння тільки частину цього рядка починаючи з нульового символу і довжиною в довжину слова engWord. Додатково, так як шукане слово engWord може бути частиною слова зі словника (приклад: engWord - ABANDON, слово зі словника -ABANDONED), я вказую що порівнювати треба не з шуканим словом engWord, а с (engWord + ";"). Але ніяк в результаті порівняння програма не знаходить збігів. Допоможіть зрозуміти чому?
Текст програми
▼Прихований текст
package ankihelper2;
import java.io.*;
import static java.lang.Byte.*;
class Helper2 {
    String transl;
    String search(String engWord) {
        char initLet;
        String resStr;
        String newResult;
        int counter = 0;
//        byte[] resStrByte;
//        byte [] engWordByte;
        StringBuilder sb = new StringBuilder();
        try (BufferedReader br = new BufferedReader(new InputStreamReader(
                new FileInputStream("e:/Dropbox/Anki/Dictionary.txt"), "UTF-8"))) {
            initLet = (char) (engWord.charAt(0));
            do {
                resStr = br.readLine();
//                System.out.println("Dict " + resStr);
//                engWordByte = engWord.getBytes("UTF-8");
//                resStrByte = resStr.getBytes("UTF-8");
                try {
//                    System.out.println("substr " + (resStr.substring(0, (engWord.length() + 1))));
//                if ((resStr).regionMatches(true, 0, (engWord + ";"), 0, (engWord.length() + 1))) {
//                if ((resStr.substring(0,(engWord.length()+1))).compareToIgnoreCase((engWord+ ";"))==0) {
                    if ((resStr.substring(0, (engWord.length()+ 1))).equals(engWord + ";")) {
                        System.out.println("YESSSS");
                        if (sb.length() > 0) {
                            counter++;
                            sb.append(" " + counter + ") ");
                            sb.append(new StringBuilder(resStr.toLowerCase()).substring((int) engWord.length() + 1));
                            System.out.println("String Builder" + sb.toString());
                        } else {
                            sb.append(resStr.toLowerCase());
                            counter++;
                            sb.insert(((int) engWord.length() + 1), counter + ") ");
//                        System.out.println("String Builder"+sb.toString());
                        }
                    }
                } catch (StringIndexOutOfBoundsException e1) {
//                    System.out.println("StringIndexOutOfBoundsException" + e1);
                }
//              
            } while ((char) resStr.charAt(0) <= initLet);
        } catch (UnsupportedEncodingException exep) {
            System.out.println("Unsupported encoding of file.");
        } catch (NullPointerException e) {
            System.out.println("No words for translation.");
        } catch (IOException exc) {
            System.out.println("I/O Error: " + exc);
        }
        newResult = sb.toString();
        if (newResult.length()>0) {
        System.out.println("newRes " + newResult);
        } else System.out.println("No match found for " + engWord +"\r\n");
        return newResult;
    }
    String translate() {
        String enWord;
        try (BufferedReader brHistory = new BufferedReader(new InputStreamReader(new FileInputStream("e:/Dropbox/Anki/all_history.txt"), "UTF-8"));
                FileWriter fw = new FileWriter("e:/Dropbox/Anki/Translation.txt", true)) {
            do {
                enWord = brHistory.readLine();
                System.out.println("Word for translation : " + enWord);
//                fw.write(search(enWord) + "\r\n");
                fw.write(search(enWord) + "\r\n");
            } while (enWord != null);
        } catch (IOException ex) {
            ex.printStackTrace();
        } catch (NullPointerException ex1) {
            System.out.println("End of History file reached ");
        }
        return transl;
    }
}
public class AnkiHelper2 {
    public static void main(String[] args) throws IOException {
        Helper2 h = new Helper2();
        h.translate();
    }
}
У попередніх версіях коли не морочився з кодуваннями, то все працювало, але не працювало з кирилицею.
На всякий випадок докладу два файли з якими працює програма.
						Post's attachmentsDictionary.rar 1.46 mb, 1 downloads since 2014-11-17