练手/翻译软件/有道翻译API/XML解析/正则/Java

  • 初衷就是写个翻译软件,同时生成一个TXT的生词本,方便我导入手机上知米的单词本系统。调用了有道的API,申请起来还是很方便。用了dom4j去初步解析XML,再通过简单的正则删改字符串。最后就是个可以中英词句查询,可以导出生词出TXT的小软件。

  • 踩的坑:Eclipse的console居然默认是GBK编码的,UTF-8内才有的音标等字符就会直接显示不出来,断点看到字符正常的,搜了半天才发现是这个问题……Run—>设置面板—->common里面改编码可破。
         
         对URLConnection里面获得的输入流包装的时候,需要显式指定UTF-8,不然中文乱码。
         
         正则表达式的使用不熟悉……………………对着表写了一堆乱七八糟的规则,感觉有很大优化空间。(主要就是在XML中去掉各种误入的标签、改中文规范提示、防止误杀。)
         
         使用打包可执行JAR的时候,仍然会出现跑不了的问题,一阵一阵的。最重要的是,图片打包不进去!!就算用了相对路径……(待研究)
         
         dom4j的使用,引入了很多新的操作方式,没有仔细看文档,照着几个模板修了下,java自带的XML操作要一层层进入,感觉对于已知的情况下,还是可以一层层写进去,但操作起来实在麻烦。
         
         BufferedWriter重新打开连续写入使用\n没办法换行。改成newLine,再写入,可破。
         
         this.setExtendedState(ICONIFIED);可以进驻任务栏标签!
         
         

  • 第一次写有网络操作的java软件,想,要是能用HTTPClient模拟登录知米,自动上传该多好,2333
    感觉自己堕落向API操作员了。

  • po搜索的类上来吧(算是有点可以复用的能力/doge),界面部分的代码没有什么参考意义。

练手/翻译软件/有道翻译API/XML解析/正则/Java_第1张图片
练手/翻译软件/有道翻译API/XML解析/正则/Java_第2张图片

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.VisitorSupport;

/**
 * 

Translation through YOUDAO's API(Both for Chinese and English)

*

Outside only need to set word through parse method, *
then get result through getResult method

* @author Xgl */
public class Search { private String result; public String getResult() { return result; } /** *

parse XML to String, and value String this.result

*/
public void parse(String word){ word = this.ToUrlEncoded(word); try { StringBuilder stringB = new StringBuilder(); String xmlStr = this.getXML(word); Document doc = DocumentHelper.parseText(xmlStr); doc.accept(new VisitorSupport(){ public void visit(Element element){ stringB.append(element.getName()+"\n"); stringB.append(element.getText()+"\n"); } }); this.result = this.doReplace(stringB.toString()); } catch (DocumentException e) { e.printStackTrace(); } } /** *

change Parsed String to displayed String

* @return displayed String */
private String doReplace(String trans){ trans = trans.replaceAll("youdao-fanyi", "来自有道翻译:"); trans = trans.replaceAll("errorCode\n0\nquery", "待翻译:"); trans = trans.replaceAll("translation\n", "\n---------翻译内容如下------\n"); trans = trans.replaceAll("\n\\s*\nparagraph", ""); trans = trans.replaceAll("\n.*\nbasic", ""); trans = trans.replaceAll("phonetic\n", "音标:\n"); trans = trans.replaceAll("explains\n", "\n---释义---\n"); trans = trans.replaceAll("web\n\\s*\nexplain", "\n--网络释义--"); trans = trans.replaceAll("ex\\s*\n", "\n"); trans = trans.replaceAll("ex\\s*", ""); trans = trans.replaceAll("key\n", ""); trans = trans.replaceAll("plain\n", ""); trans = trans.replaceAll("value\n\\s*\n", ""); trans = trans.replaceAll("paragraph\n", "\n"); return trans; } /** *

get XML from Youdao's API through HTTP

* @return XML String including translation */
private String getXML(String word){ try { URL url = new URL("http://fanyi.youdao.com/openapi.do?keyfrom=GrayXu&key=2140959968&type=data&doctype=xml&version=1.1&q=" +word); URLConnection urlConnection = url.openConnection(); InputStream is = urlConnection.getInputStream(); InputStreamReader isr = new InputStreamReader(is,"UTF-8"); BufferedReader bReader = new BufferedReader(isr); String line; StringBuilder sBuilder = new StringBuilder(); while ((line = bReader.readLine()) != null) { sBuilder.append(line); } bReader.close(); isr.close(); is.close(); return sBuilder.toString(); } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } /** *

change the word to UrlEncoded

* @return UrlEncoded */
private String ToUrlEncoded(String word) { String urlStr = null; try { urlStr = URLEncoder.encode(word,"UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return urlStr; } }

你可能感兴趣的:(java,练手)