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