014.java_国际化相关类、正则表达式相关类和大数字操作

国际化相关类

1.java.util.Local类

Locale类的对象代表特定的地理、政治和文化地区。有三种获取Local对象的方式。

1.使用构造器

public Locale(String language,String country)

2.利用Locale常用语言环境预设的常量来创建。

Locale locale=Locale.CHINA;//获取代表中国大陆的Locale对象

3.获取此JVM当前默认的语言环境Loacle对象

Locale locale=Locale.getDefault( )

import java.util.Locale;

public class LocaleTest {
	/*Locale类的三种初始化*/
	/*1.利用构造器初始化*/
	static Locale locale1=new Locale("zh","CN");
	
	static Locale locale2=Locale.CHINA;
	
	static Locale locale3=Locale.getDefault();
	
	public static void main(String[] args){
		System.out.println(locale1);
		System.out.println(locale2);
		System.out.println(locale3);
	}
}

运行结果:

zh_CN
zh_CN
zh_CN
java.text.MessageFormat类的格式化字符串

MessageFormat提供了与语言无关的生成连接消息的方式。用来向终端用户显示信息。常用方法:

public static String format(String patten,Object...arguements)//patten:指定消息格式模式,此模式可用“{索引}”来预设占位符。arguements:消息格式模式中指定的占位符传值,它会按照占位符的索引顺序来依次传入数组中的各个元素值。

import java.text.MessageFormat;
import java.util.Date;

public class MessageFormatTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String patten="{0}程序设计语言,当前日期时间:{1}";//消息格式模式
		String str=MessageFormat.format(patten, "Java",new Date());
		System.out.println(str);
		System.out.println(new Date());
	}

}

运行结果:

Java程序设计语言,当前日期时间:18-3-27 下午2:42
Tue Mar 27 14:42:08 CST 2018

Java程序的国际化

java语言内核基于Unicode,国际化通过三个类完成。

Java.util.Locale:对应一个国家或地区的语言环境

java.text.MessageFormat:用于将消息格式化

java.util.ResourceBundle:用于加载一个资源包   表示一个资源文件的读取操作,不需要加后缀,文件后缀默认为“.properties”。常用方法:

public static final ResourceBundle getBundle(String baseName):根据本地的语言环境和指定的文件名,获取到资源包对应的ResourceBundle实例。

public static final ResourceBundle getBundle(String baseName,Locale locale):根据指定的语言环境和指定的文件名,获取到资源包对应的ResourceBundle实例。

public final String getString(String key):根据资源文件中key取得对应的value。

1.准备资源包

命令提示符输入“native2ascii.exe”将中文字符转为Unicode字符。

2.引用本地化数据

import java.text.MessageFormat;
import java.util.Date;
import java.util.Locale;
import java.util.ResourceBundle;

public class I18NHelloWorldTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Locale mylocale=Locale.getDefault();//取得系统默认的国家/地区语言环境
		ResourceBundle bundle=ResourceBundle.getBundle("msgs", mylocale);//根据指定的国家/地区语言环境加载资源包
		String msg=bundle.getString("hello");//从资源包中取得key所对应的消息
		String s=MessageFormat.format(msg, new Object[]{"张三",new Date()});//为带占位符的字符串传入参数
		System.out.println(s);
		
		/*运行错误:
		 *Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name msgs, locale zh_CN
	at java.util.ResourceBundle.throwMissingResourceException(Unknown Source)
	at java.util.ResourceBundle.getBundleImpl(Unknown Source)
	at java.util.ResourceBundle.getBundle(Unknown Source)
	at zz.Zzz.main(Zzz.java:13) */
	}

}
 最近在学习ResourseBundle时遇到了“Can't find bundle for base name ”这个错误搞了很久才解决了。


我的config.properties 文件位置在 java工程 根目录下的config中;
java 工程目录结构 如下,
CheersJava(工程目录)
-------src
-------lib
-------target
-------config(config.properties在此目录下)
.classpath


解决方法:
在eclipse中 - CheersJava工程上 右键 -Properties -Java Build Path, 在Libraries选项卡中,点击 “Add Class Folder...” 选择config目录将其添加。
然后运行代码,问题解决。

运行结果:

你好,张三!今天是18-3-28 上午11:20.


备注:
用本文编辑器打开.classpath 文件,发现多了一行:<classpathentry kind="lib" path="config"/>

参考文章:http://verran.iteye.com/blog/44357

java.text.NumberFormat类的格式化数字方法

NumberFormat类是数值格式的抽象基类,此类提供了格式化和解析数值的方法。通过以下静态方法来获取NumberFormat对象。

public static final NumberFormat getNumberInstance():返回当前默认语言环境的通用数值格式

public static final NumberFormat getPercenInstance():返回当前默认语言环境的百分比格式

public static final NumberFormat getCurrencyInstance():返回当前默认语言环境的货币格式

获取对象后,调用format方法对指定的数进行格式化。

import java.text.NumberFormat;
import java.util.Locale;

public class NumberFormatTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		NumberFormat format1=NumberFormat.getNumberInstance();//当前语言的通用数值格式
		String str1=format1.format(123.45);//使用format方法对数值123.45进行格式化
		System.out.println(str1);//输出结果
		
		NumberFormat format2=NumberFormat.getPercentInstance();//百分比格式
		String str2=format2.format(0.235);
		System.out.println(str2);
		
		NumberFormat format3=NumberFormat.getCurrencyInstance();
		String str3=format3.format(123.45);
		System.out.println(str3);
		/*指定地区为us*/
		Locale locale=Locale.US;
		NumberFormat format4=NumberFormat.getCurrencyInstance(locale);
		String str4=format4.format(123.45);
		System.out.println(str4);
	}

}

运行结果:

123.45
24%
¥123.45
$123.45

DecimalFormat类

用户指定数字格式来显示数字

import java.text.DecimalFormat;

public class DecimalFormatTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(formatDecimal("000,000.00", 4656.23));
	}
	public static String formatDecimal(String pattern,double number){
		DecimalFormat df=new DecimalFormat(pattern);
		return df.format(number);
		}
}

运行结果:

004,656.23

java.text.DateFormat类的格式化日期时间方法

DateFormat是日期/时间格式化的抽象基类,它用来格式化或解析日期或时间。子类通过以下静态方法获取。

public static final DateFormat getDateInstance()//获取日期格式器,默认语言环境的默认风格

public static final DateFormat getDateInstance(int style)//获取日期格式器,默认语言环境的指定风格(SHORT,DEFAULT,MEDIUM,LONG,FULL)

public static final DateFormat getTimeInstance()//获取时间格式器,默认语言环境的默认风格

public static final DateFormat getDateInstance(int style)//获取时间格式器,默认语言环境的指定风格(SHORT,DEFAULT,MEDIUM,LONG,FULL)

public static final DateFormat getDateTimeInstance(int style,int style)//获取日期、时间格式器,默认语言环境的指定风格(SHORT,DEFAULT,MEDIUM,LONG,FULL)

获取到构造器后,可以用 public final String format(Date date)方法把一个日期时间对象格式化成默认格式或指定格式的字符串;

通过public Date parse(String source)throws ParseException方法,把一个字符串按默认格式或指定格式输出date对象

import java.text.DateFormat;
import java.text.ParseException;
import java.util.Date;

public class DateFormatTest {

	public static void main(String[] args) throws ParseException {
		// TODO Auto-generated method stub
//		DateFormat dateformat=DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.SHORT);//2018年3月27日 下午4:16
		DateFormat dateformat=DateFormat.getDateTimeInstance();//2018-3-27 16:16:38
		String str=dateformat.format(new Date());
		System.out.println(str);
		
		try{
		Date date=dateformat.parse("2018-3-27 16:11:41");
		System.out.println(date);
		}catch(ParseException e){
			e.printStackTrace();
		}
		
	}

}

运行结果:

2018-3-27 16:17:23
Tue Mar 27 16:11:41 CST 2018

正则表达式相关类

正则表达式描述了一种字符串匹配模式,当需要定位符合定模式的字符串时,就需要用正则表达式。如查找、替换字符串、判断邮箱地址是否合法、抓取邮箱地址等

正则表达式语法:

正则表达式由普通字符和元字符组成,它作为一个模板,将某个字符模式与所搜索的字符串进行匹配。

元字符从功能上分为:限定符、选择匹配符、特殊字符、字符匹配符、定位符、分组组合符、反向作用符。

1.限定符

限定符说明
*

匹配前面的字符或子表达式零次或多次

例如:“ja*”  匹配“j”和“jaa”

+

匹配前面的字符或子表达式一次或多次

例如:“ja+”与“ja”和“jaa” 匹配,但与“j”不匹配

匹配前面的字符或子表达式零次或一次

例如:“core?”匹配“cor”或“core”

{n}

正好匹配n次,n为非负整数

例如:o{2}与“bob”不匹配,与“foot”匹配

{n,}

至少匹配n次

例如:o{2,}与“bob”不匹配,与“foooot”匹配

0{0,}等效于o*

{n,m}

最少匹配n次且最多匹配m次,m、n都为非负整数,n≤m

2.选择匹配符

“|”,用于选择匹配两个选项中的任意一个

3.特殊字符

普通字符用ASCII码或Unicode码来代表

如字母b 它的ASCII码值为98  十进制为62  所以它的ASCII码为“\x62”   它的Unicode码值为“\u0062”

如果元字符当作普通字符来使用,要使用“\”转义。“\*”匹配“*”字符

4.字符匹配符

字符匹配符用于匹配指定字符集合中的任意一个字符

\S匹配任何非空白字符
[...]

字符集。匹配指定字符集合包含的任意一字符

例如[a,b,c]匹配a b c

[^...]

反向字符集。匹配指定字符集合未包含的任意一字符

例如[^a,b,c]匹配除a b c意外的任意一个字符

[a-z]字符范围,匹配指定范围内的任意一个字符
[^a-z]字符范围,匹配除指定范围外的任意一个字符
.匹配除“\n”之外的任何单字符
\d数字字符匹配
\D非数字字符匹配
\w匹配任何单词字符
\W匹配任何非单词字符
\s匹配任何空白字符


5.定位符

用于规定匹配模式在目标字符串中的出现位置。

^匹配输入字符串开始的位置。“^”必须出现在正则表达式的最前面才起作用。
$

匹配输入字符串结尾的位置。“$”必须出现在正则表达式最前面才起作用

\b

匹配一个单词边界

例如:“er\b” 匹配never 不匹配verb

\B

非字边界匹配

例如:“er\B” 匹配verb 不匹配never

  

6.分组组合符

分组组合符就是用()将正则表达式的某一部分定义为“组”,并且将匹配这个组的字符保存到一个临时区域。用于字符提取。

(pattern):捕获性分组。将子匹配项按照从左到右的出现顺序保存在缓冲池中,编号从1开始。(dog)\1 匹配“dogdogdog”中的“dogdog”

(?:pattern):非捕获性分组。不能捕获以供使用。

(?=pattern):正向预测匹配分组。例如“windows(?=xp|2003)”正则模式,与“windows xp”和“windows 2003”中的“windows”匹配,不与“windows vista”中的“windows”匹配。

(?!pattern):负向预测匹配分组。例如“windows(?!95|98|NT)”能匹配“windows xp”中的“windows”,不能匹配“windows 95”中的windows

7.反向引用符

用于对捕获到的组进行引用的符号。用“\组编号”来引用。例如“good good study,day day up”可以用“\b([a-z]+)\1\b”来匹配。

java se中的正则表达式API

两个最终类:

Pattern:正则表达式经编译后的表现形式、模式编译器。

Matcher:通过解释指定模式对字符串进行匹配检查、模式匹配器。

Pattern类常用方法如下:

public static Pattern compile(String regex)://将给定的正则表达式进行编译,然后返回编译后的Pattern对象。

public static pattern compile(String regex,int flags)://将给定的正则表达式进行编译,然后返回编译后的Pattern对象。flags表示匹配时的选项,常用的flags参数有:CASE_INSENSITIVE:启动不区分大小写的匹配;COMMENTS:模式中允许空白和注释;MULTLINE:启动多行模式

public Matcher matcher(CharSequence input)://创建用于匹配给定输入字符序列的模式匹配器。

public static boolean matches(String regex,CharSequence input)//直接判断字符序列input是否匹配正则表达式regex。

Matcher类常用方法:

   Matcher m = Pattern.compile(regex).matcher(str)

    m.maches(),对整个字符串进行匹配,整个字符串都匹配才返回true.

    m.lookingAt(),字符串(str)以指定模式(regex)开始返回true

    m.find(),字符串(str)在任意位置指定匹配模式(regex)就返回true


正则表达式使用实例:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegularExpressionTest {
	
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(matchLoginname("qiujy"));
		System.out.println(matchLoginname("wwwww"));
		
		System.out.println(getFilename("c:/abc/dsd/dsd/wd/wasd/ds.txt"));
		
		System.out.println(RegularExpressionTest.zz());
	}
	
	/*判断登录名是否合法:只有由数字字母下划线组成,长度4个以上*/
	public static boolean matchLoginname(String loginname){
		return Pattern.matches("\\w{4,}", loginname);
		/*"\"是转义字符;正则表达式中要用"\",就要用"\\"代替。要用"\\",用"\\\\"代替。
		 * \w:匹配任何单词字符*/
	}
	
	//提取指定路径名中的文件名
	public static String getFilename(String path){
		String result="";
		String regex=".+/(.+)$";
		Matcher m=Pattern.compile(regex).matcher(path);
		if(m.find()){
			result=m.group(1);
		}
		return result;
	}
	
	//验证中文名是否合法
	public boolean checkChineseName(String cn){
		return Pattern.matches("[\\u4E00-\\u9A5]+", cn);
	}
	
	//验证E-mail地址
	public boolean checkEmail(String email){
		return Pattern.matches("[a-zA-Z0-9]+@[a-Za-Z0-9]+\\.[a-zA-Z0-9]", email);
	}
	
	//验证手机号
	public boolean checkPhoneNumber(String num){
		return Pattern.matches("^1[3568]\\d{9}", num);
	}
	
	//验证邮政编码
	public boolean checkPostCode(String code){
		return Pattern.matches("\\d{6}", code);
	} 
	
	//字符串替换
	public static String zz(){
		String str="我我我要学Java";
		Matcher m=Pattern.compile("(.+)\\1+").matcher(str);//匹配所有的连续重复字符串
		str=m.replaceAll("$1");//把匹配到的字符串替换成第一个分组匹配的结果
		return str;
	}
	

}

运行结果:

true
true
ds.txt
我要学Java

大数字操作

在java.Math包中BigInteger和BigDecimal类提供对大数字的操作。

BigInteger代表任意精度的整数,BigDecimal代表任意精度的浮点数。

import java.math.BigDecimal;
import java.math.BigInteger;

public class BigNumberTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		/*两种构造方式   */
		BigInteger b1=new BigInteger("6666666666");
		BigInteger b2=BigInteger.valueOf(Long.parseLong("99999999999999"));//接受long型参数
		
		System.out.println("和"+b1.add(b2));
		System.out.println("差"+b1.subtract(b2));
		System.out.println("积"+b1.multiply(b2));
		System.out.println("商"+b2.divide(b1));
		System.out.println("余"+b2.remainder(b1));
		
		BigDecimal d1=new BigDecimal("4654654653463.4848494");
		BigDecimal d2=new BigDecimal("4678977989879879.3654");
		System.out.println("和"+d1.add(d2));
		System.out.println("差"+d1.subtract(d2));
		System.out.println("积"+d1.multiply(d2));
		System.out.println("商"+d2.divide(d1,5,BigDecimal.ROUND_HALF_UP));
	}

}

运行结果:

和100006666666665
差-99993333333333
积666666666599993333333334
商15000
余9999
和4683632644533342.8502494
差-4674323335226415.8805506
积21779026674047602808223187817.96258657076
商1005.22559

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、个人在线添加求职简历 2、个在线上传个人相片 3、首页显示最新新闻信息10条(可修改) 4、首页显示最新招聘信息10条(可修改) 5、首页显示最新求职信息10条(可修改) 6、注册用户可在线发送求职/招聘意向邮件 7、企业可发布多条招聘信息 8、企业自己删除招聘信息 9、个人/企业帐号注销 10、首页页尾导航采用数据库形式方便随时更改 11、首页所有广告及链接图片均为数据库形式更新更轻松 12、站内基本信息统计 13、在线人才新闻系统 14、在线政策法规发布系统 15、在线人事代理信息发布系统 16、企业营业执照图片在线上传 17、企业信息和招聘信息独立分开,更便于查看 18、院校用户注册功能(暂不提供) 19、培训机构注册(暂不提供) 20、猎头服务(暂不提供) 21、站内信件群发 22、新闻添加删除 23、政策法规信息添加删除 24、人事代理信息添加删除 25、系统后台管理可直接设置前台广告图片链接版权等信息 26、在线调查系统(以功能在vote.asp 和 votechk.asp页面上,本站没有使用 27、后台清空调查数据 28、招聘信息管理 29、后台管理分三级设置 30、系统管理员拥有所有权限 31、二级管理员可对所有用户及新闻、政策、人事等信息有管理权限 32、三级管理员只拥有新闻、政策、人事等信息的发布删除权 33、站内信件群发 34、首页广告图片后台直接设置,方便更换 35、首页链接及页面标题后台直接设置 36、后台添加管理员,删除管理员 37、后台修改管理员权限 38、站内信息搜索(本程序未程序,在search.asp 和 searchs.asp 页面上。)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值