1

Тема: Порівняти дві змінні String в форматі UTF-8

Шановні форумчани.
Програма повинна порівняти частину стрінгової змінної 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 attachments

Dictionary.rar 1.46 mb, 1 downloads since 2014-11-17 

2

Re: Порівняти дві змінні String в форматі UTF-8

Спробуйте в 34-му рядку прибрати "+1"