[java] 汇率换算器实现(2)
[java] 汇率换算器实现(2)
[java] 汇率换算器实现(2)
Table of Contents
- 1 系列文章地址
- 2 前言
- 3 获取实时汇率信息
- 3.1 获取网页内容
- 3.2 提取web表单
- 4 正则表达示匹配获取表单信息
- 5 总结
1 系列文章地址
- java 汇率换算器的实现(1)
2 前言
在上篇文章中, 我们实现了汇率换算器的最简单的版本, 实现了:
- 帮助信息的提示
- 汇率表的输入
- 错误输入的处理
- 汇率计算的输入
- 汇率计算结果的输出
不同类之间的关系图如下(不是严格按照uml规则绘制的):
在接下来的内容中主要介绍如何实现汇率表的实时更新.
3 获取实时汇率信息
想要获取汇率的实时信息, 很容易想到的方法就是从一个网页中提取相应的汇率信息, 填充到当前的汇率表内. 接着自然想要, 使用java进行network programming, 可以借用java.net库.
3.1 获取网页内容
class Rate {
// 从网站:http://www.usd-cny.com/中获取最新的汇率信息
final static String webSite = "http://www.usd-cny.com/";
// 利用hashtable对不同货币之间的利率进行存储
// key: $from+$to, value: $rate
private static Hashtable rateTable = new Hashtable();
// 获取网页内容
public static void update() throws Exception {
URL hp = new URL(webSite);
URLConnection hpCon = hp.openConnection();
System.out.println("== Content ==");
InputStream input = (InputStream)hpCon.getInputStream();
BufferedReader br = new BufferedReader(new
InputStreamReader(input, "gb2312"));
String str = null;
while (( str = br.readLine() ) != null) {
System.out.println(str);
}
input.close();
}
}
接下来要干的活就是从获得的网页内容中提取出汇率表信息了. 网页上显示的格式如下:
3.2 提取web表单
为了存储表单中提取的信息, 建立了一个新类: class RateInfo
class RateInfo {
String to;
// [0]: 现汇买入价 [1]: 现钞买入价
// [2]: 卖出价 [3]: 中间价 [4]: 基准价
Double price[] = new Double[5];
}
具体的实现可以通过两种方式:
- 正则表达示匹配
- 借用现有的库, jsoup
该文主要实现了第一种方式, 这里再次说明一下,在后续的文章中会介绍关于jsoup的使用。
4 正则表达示匹配获取表单信息
首先让我们来观察一下需要处理的网页的source code.
|
货币名称
|
现汇买入价
|
现钞买入价
|
卖出价 |
中间价 |
基准价
|
621.8700 |
616.8900 |
624.3700 |
623.1200 |
615.5700 |
|
| 对于上述字符的识别可以用以下方式进行实现: str.startwith(token), where token = " 5 总结该文实现了利用正则表达式获取html表单信息. 但是, 该方法主要有的不足是: 具有太明显的目的性, 根据具体html代码的特征实现相应的匹配. 为了实现更普遍的方法, 应该对该匹配规则进行改进, 下一篇文章种将对该方法进行进一步的改进. Date: 2014-05-07 Wed Org version 7.8.11 with Emacs version 24 Validate XHTML 1.0相关 |