`

Java学习系列(六)Java面向对象之Jar命令、正则表达式、国际化详解

 
阅读更多

首先向大家道个歉,前面3天由于在忙着写项目说明文档,所以耽误了一下。今天借着中午这段时间把前面的补回来。话不多说,下面步入正题吧!

Jar命令:jar可以把多个文件打包成一个压缩包,得到的压缩包通常有3种:1)*.jar -它里面包含N个class文件。2)*.war(Web) -它是一个Web应用打包生成的包。3)*.ear(Enterprise) -它是一个企业应用打包生成的包。这里我们学习时常用的*.jar这种方法。在运行命令窗口输入jar我们可以看到jar命令的如下参数选项:

举例说明几个常用的:

命令:jar -cvf test.jar *.class //为新创建的jar包取名为test
jar -cMf test.jar *.class //创建压缩包,不生成清单文件(META-INF下面的manifest.mf文件)
jar -tvf test.jar //查看压缩包
jar -xvf test.jar //解压 (加v可以看到详细的过程,可不加)
jar -uvf test.jar A.class //添加A.class到test.jar中。
【打包成可执行的JAR包】jar -cvfe my.jar UserTest *.class //通过-e告诉JVM UserTest为主类,并打包。
这样如果机器上安装了独立的虚拟机,只要双击“可执行型”的JAR包即可运行。
如果没装则:java -jar my.jar //运行
javaw -jar my.jar //主要用于有界面的程序(javaw和java差不多)
若不需要清单文件,可以使用windows里的WinRAR或WinZi压缩,然后把后缀改成.jar即可。

Jar命令的好处:方便管理。JVM可以直接加载Jar包,这样就可以一次加载N个类,效率更高。

Java程序入口(main)方法说明:public -系统来调用该方法时,不可能在同一个包中,也不会是它的子类
static -无需创建实例,直接用类名调用入口方法。--执行:java 主类类名 数组元素1 数组元素2...
String[] args:args默认是长度为0的数组,可在程序运行时动态传入args参数值。

正则表达式:就是一个可以匹配N个字符串的字符串模板。

正则表达式所支持的通配符:
. -可以匹配任意字符。
\s -代表一个任意空白(空格、Tab)
\S -代表一个任意的非空白
\d -代表一个任意的数字(digital)
\D -代表一个任意的非数字
\w -代表一个单词字符
-W -代表一个任意的非单词字符
str.matches(regex);//判断str字符串是否匹配给定的正则表达式。
"123.123".replaceAll("\\.", "#"); //结果:123#123
特殊字符(实际用时记住要转义\):( ) [ ] { } \ ? * + ^(一行的开头) $(一行的结尾)|
表示出现次数的“副词”:
? --代表它前面的东西可以出现0~1次
* --代表它前面的东西可以出现0~N次
+ --代表它前面的东西可以出现1~N次
{n,m} --代表它前面的东西可以出现n~m次
{n,} --代表它前面的东西至少出现n次
{,m} --代表它前面的东西最多出现m次
{n} --代表它前面的东西必须出现n次
方括号表达式:
枚举:[ab中] --代表a或x或者“中”。
范围:[a-c] --代表a,b,c中的任意一个字符。
枚举与范围:[a-c1-3]--代表a,b,c,1,2,3中的任意一个字符。
表示求否:[^a-c] --代表不含a,b,c其中任意一个字符。
表示求交:[a-g&&[^b-d]]:--代表a,e,f,g中的任意一个字符。--总结:一个字符用\,多个字符用[],字符次数用{}
(com|org|cn):表示必须含有其中之一。
--除此自外,Java专门提供了两个工具类:
Pattern - 它就是代表正则表达式模板。
Matcher -代表一个匹配工具类。
find():查找下一个匹配正则表达式的字符串。group()取出上一次与正则表达式匹配的字串。

举例说明(找出邮箱):

 

public class RegexTest {
	public static void main(String[] args) {
		String str ="这本书价格是52.9元,作者的两个邮箱:一个是123@qq.com,另外一个是234@163.com";
		Pattern pattern = Pattern.compile("[a-zA-Z0-9]{2,}@[a-zA-Z0-9]{2,}\\.(com|org|net|cn)");
		Matcher matcher = pattern.matcher(str);
		while(matcher.find()){
			System.out.println(matcher.group());
		}
	}
}

国际化(简称:i18N):希望一个程序,可以“自适应”所有用户环境。--本质是“查找”、“替换”。

 

国际化的步骤:
(1)提供资源文件,负责为程序提供国际化消息,同时资源文件的文件名必须满足:<baseName>_语言代码_国家代码.properties。如果资源文件包含了非西欧字符,需要使用native2ascii工具类处理这个文件。

处理格式:native2ascii 要处理的文件 生成的新文件名(资源文件)。
(2)使用ResourceBundle来加载国际化资源文件
(3)从所加载的文件中查找key对应的字符串进行替换。
--调用ResourceBundle的getMessage()方法(负责为消息中的占位符填充参数值)输出国际化消息。

举例说明1:

 

/*
 * Description:获取Java语言的所支持的所有Locale
 * */
public class LocaleTest {
	public static void main(String[] args) {
		Locale[] locals = Locale.getAvailableLocales();
		for (Locale ls : locals) {
			System.out.println(ls.getDisplayCountry() + "   "
					+ ls.getLanguage() + "   " + ls.getCountry());
		}
	}
}

举例说明2:
1)我们写一个test.properties文件,内容为:hi=你好!welcome={0},欢迎你!2)执行命令行:native2ascii test.properties test_zh_CN.properties

 

我们将看到生成的内容如下:hi=\u4f60\u597d\uff01
welcome={0},\u6b22\u8fce\u4f60\uff01

3)编码如下:

/*
 * Description:获取并替换国际化资源文件信息
 * */
public class LocaleTest {
	public static void main(String[] args) {
		// Java 虚拟机实例的当前默认语言环境值
		Locale currentLocale = Locale.getDefault();
		// 加载国际化资源文件,test为资源文件名前缀
		ResourceBundle bundle = ResourceBundle.getBundle("test",currentLocale);
		 // 从bundle所加载的文件中查找hi对应的字符串进行替换。
		System.out.println(bundle.getString("hi"));
		//将占位符的内容替换为“张三"
		System.out.println(MessageFormat.format(bundle.getString("welcome"), "张三"));
	}
}

结束语:

 

今天内容就讲这么多,明天开始学习Java面向对象之集合框架。内容比较多,所以打算分两次讲。



 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics