您的位置:首页 > 编程语言 > Java开发

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

2014-04-25 11:19 260 查看
首先向大家道个歉,前面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()取出上一次与正则表达式匹配的字串。

举例说明(找出邮箱):

Java代码



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:

Java代码



/*

* 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)编码如下:

Java代码



/*

* 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面向对象之集合框架。内容比较多,所以打算分两次讲。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: