首先让我们来观察一下需要处理的网页的source code.

货币名称
现汇买入价
现钞买入价
卖出价
中间价
基准价
美元 USD
621.8700 
616.8900 
624.3700 
623.1200 
615.5700 

分析发现, 汇率表由大写的TABLE包括起来, 每一行由TR包围, 每一项由TD包围. 因此, 正则表达式为:

\(.*?\): now "\1" means "美元 USD"\(.*?\)

对于上述字符的识别可以用以下方式进行实现:

str.startwith(token), where token = "

str.startwith("

str.startwith("

to extract the unit of the money

import java.util.regex.*;

String patt = "

\\(.*?\\)"

Pattern r = Pattern.compile(patt);

Matcher m = r.matcher(str);

m.group(1); // is the result, such as "美元 USD"

用类似的方法可以获得rates

然后编写代码进行实现, 具体实现思路如下:

实现html源代码中关于汇率表的相关内容行的识别

然后, 从特定的行中提取出相应的汇率信息

classRate {//从网站:http://www.usd-cny.com/中获取最新的汇率信息

final static String webSite = "http://www.usd-cny.com/";//利用hashtable对不同货币之间的利率进行存储//key: $from+$to, value: $rate

private static Hashtable rateTable = newHashtable();//从网上自动更新汇率信息//只将前16个具有完整汇率信息的内容进行存储

public static void update() throwsException {

URL hp= newURL(webSite);

URLConnection hpCon=hp.openConnection();

System.out.println("== Content ==");

InputStream input=(InputStream)hpCon.getInputStream();

BufferedReader br= new BufferedReader(newInputStreamReader(input,"gb2312"));

String str= null;boolean inTable = false;int nRows = 0;

String matchStr= null;while (( str = br.readLine() ) != null) {

str=str.trim();//判断是否进入汇率表的势力范围内部

if (str.startsWith("

inTable= true;continue;

}if (str.startsWith("

}if (inTable == false)continue;if (str.startsWith("

nRows+= 1;//忽略第一行的标题

if (nRows == 1) continue;//汇率表的读取只到港币

if (nRows == RateInfo.NKINDS+2) break;//获得第一列的完整代码

str =br.readLine().trim();

str= str +br.readLine().trim();//获取币种缩写

String patt = "

(.*)";

Pattern r=Pattern.compile(patt);

Matcher m=r.matcher(str);//matchStr = m.group(1);//将汉字与缩写进行分离//matchStr = (matchStr.split())[1];

if(m.find()) {

matchStr= m.group(1);

matchStr= (matchStr.split(" "))[1];

System.out.println(matchStr);

}else{

System.out.println("No Match");

}for (int i = 0; i < RateInfo.NELEM; i++) {

str=br.readLine();

String pattE= "

(.*?) ";

r=Pattern.compile(pattE);

m=r.matcher(str);if(m.find())

System.out.println(m.group(1));elseSystem.out.println("No Match");

}

}

}

input.close();

}//设置不同货币之间的利率//1 $from * $rate = 1 $to

public static void setRate(String from, String to, doublerate) {

rateTable.put(from+to, newDouble(rate));

}public staticDouble getRate(String from, String to) {return 615.65;//return (Double) rateTable.get(from + to);

}//将一定量的货币$m, 转变成单位为$to的货币量//return: 相应的货币值

public staticMoney exchangeRate(Money m, String to) {if (m.unit.equals(to)) return newMoney(m);

Double rate=getRate(m.unit, to);if (rate == null) {throw newIllegalArgumentException();

}return new Money(m.amount*rate.doubleValue(), to);

}

}

java 汇率换算_[java] 汇率换算器实现(2)相关推荐

  1. 度数换算_度数的换算

    度数转换 散光隐形眼镜度数怎样换算 编辑:季勇 2014 年 04 月 16 日 13:50 浏览次数:9834 次 分享到: [导语] :很多人都喜欢带隐形眼镜,隐形眼镜有矫正视力,省去了框架眼镜的 ...

  2. java 重量单位换算_[Java教程]JS:重量单位换算

    [Java教程]JS:重量单位换算 0 2015-11-03 14:00:04 //单位换算:数量,原单位,目标单位 var GetNumByUnit = function (num, unitnam ...

  3. java取负数_[Java] 告别“CV 工程师”码出高效!(基础篇)

    作为一名资深的 CV 工程师,某天,当我再一次日常看见满屏的报错信息与键盘上已经磨的泛白的 Ctrl.C.V 这三个按键时,我顿悟了. 百度谷歌复制粘贴虽然很香,但是总是依靠前人种树,终会有一天失去乘 ...

  4. java控制语句练习题_[Java初探实例篇02]__流程控制语句知识相关的实例练习

    本例就流程控制语句的应用方面,通过三个练习题来深入学习和巩固下学习的流程控制语句方面的知识,设计到,if条件判断语句,switch多分支语句,for循环语句及其嵌套多层使用,while循环语句. 练习 ...

  5. java 文本压缩_[Java基础]Java使用GZIP进行文本压缩

    import java.io.IOException; import java.util.zip.GZIPOutputStream; import org.apache.commons.io.outp ...

  6. java private 对象_[Java笔记]类的所有构造器都是private权限,就一定没有办法实例化它的对象了么?...

    笔者以前学过C++语言.众所周知,C++也是一门面向对象程序设计语言.还记得当时在大学的时候,老师讲过这样的话:类的构造函数不应该设置成private权限,这样的话还怎么去实例化类的对象?当时也信以为 ...

  7. java resources 目录_[Java] 在 jar 文件中读取 resources 目录下的文件

    注意两点: 1. 将资源目录添加到 build path,确保该目录下的文件被拷贝到 jar 文件中. 2. jar 内部的东西,可以当作 stream 来读取,但不应该当作 file 来读取. 例子 ...

  8. java斗地主发牌_[Java源码]扑克牌——斗地主发牌实现

    --------------------------------------- --------------------------------------- ----------一个扑克牌核心和简单 ...

  9. java小朋友猜拳_[Java教程]Java猜拳小游戏(剪刀、石头、布)

    [Java教程]Java猜拳小游戏(剪刀.石头.布) 0 2015-09-29 08:00:04 import java.util.Random;import java.util.Scanner;pu ...

  10. java星空屏幕_[Java教程]窗口设置_星空网

    窗口设置 2016-04-13 0 /** * 这个是GUI的事例程序: * */ package w160412.wang.main;import java.awt.Color; import ja ...

最新文章

  1. 【错误记录】Flutter 混合开发报错 ( java.nio.file.FileSystemException: xxx/R.jar: 另一个程序正在使用此文件,进程无法访问。 )
  2. 天池四月读书会|数据分析金融量化,6场直播,6位大咖,6个项目实战
  3. java 会话共享_java – servlet如何工作?实例化,会话,共享变量和多线程
  4. ubuntu18.04 用xhell连接失败
  5. java爬虫爬取主流房屋网站
  6. CSipIm断网重连崩溃原因分析
  7. CYQ.Data 轻量数据层之路 使用篇-裸身走走天涯 视频 B (十九)
  8. linux cam软件,基于Linux图形交互式线切割CAM软件实现技术研究
  9. 计算机组成原理 - x86 x64 arm64的区别 - 学习/实践
  10. python可以代替plc吗_python 读写西门子PLC 包含S7协议和Fetch/Write协议,s7支持200smart,300PLC,1200PLC,1500PLC...
  11. 【论文笔记】Deep Survival: A Deep Cox Proportional Hazards Network
  12. 关于期权池Option Pools与Vesting:码农创业防身必备法器
  13. 描述一下普适计算时代中的计算机,浅析普适计算及其应用.doc
  14. 面板行业从“渐冻”中复苏,TCL科技大尺寸面板龙头站上C位
  15. Base 64 图片解码
  16. MySQL入门 - 数据分组之 group by
  17. 如何使用Java获取货币符号?
  18. 兵法三十六计第三计-借刀杀人。
  19. linux xunsou_Linux 之 xunsearch
  20. 如何用代码实现抖音的图片旋转

热门文章

  1. C. Dominant Character
  2. LeetCode 一题多解 | 53. 最大子数组和:五种解法完全手册
  3. python中英文对齐_Python中英文对齐终极解决方案
  4. axure中继器求和_axure中继器使用方法图文详解
  5. axure中继器求和_中继器使用场景(二):购物车金额实时求和
  6. 两年的前端程序员的反省与总结
  7. 非安装版 Python 安装 PIP
  8. python colorbar刻度_python-如何添加Matplotlib Colorbar刻度
  9. BCH5月硬分叉,如果做成了支付,会超越BTC吗?
  10. discuz 模板标签