/**

* 字符串与包装类

*/

package com.org.lxh;



import java.util.Date;

import java.util.regex.Matcher;

import java.util.regex.Pattern;



/**

* @author Administrator

*

*/

public class Chp8 {

/*

* 验证电话号码

*/

public static String checkPhoneNumber(String text){

if(text == null || text.isEmpty()){

return "error";

}


//定义正则表达式

String regex = "^\\d{3}-?\\d{8}\\d{4}-?\\d{8}$";

if(text.matches(regex))

return "电话号码";

else

return "不是的";


}






/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub


//1、语句 "3+5="+3+5 输出什么?

System.out.println("3+5="+3+5);


//2、String str = null; 与 String str=""; 的区别是什么?

/*

* 前一句没有分配内存,后一句创建了一个长度为0的空字符串。并在内存中为其分配了内存空间。

*

*/


//3、String类是否可以被继承?

/*

* 不可以

*

*/


//4、字符串大小写的转换?

/*

*

*

*/

String str = "Long long ago, There's girl,She's name little REDHAT!";

String str2 = str.toUpperCase();

String str3 = str.toLowerCase();

System.out.println(str + "\n" + str2 + "\n" + str3);



//5、字符串的反向输出?

/*

*

*

*

*/


//6、== 运算符与equals()比较对象的区别是什么?

/*

* 当使用运算符 “==” 比较两个对象时,是比较两个对象使用的内存地址和内容是否相同,如果两个对象使用的是同一个地址,

* 并且内容相同,则结果为true,否则结果为false。

*

* 当使用equals()比较两个对象时,则是比较两个对象的内容是否相同,而与对象的内存地址无关。

*

*/

String str11 = new String("hello");

String str22 = new String("hello");

String str33 = str22;
//str22与str33同一个内存地址

String str44 = "hello";


//使用 == 比较str11和str22

System.out.println("str1 == str2 比较的结果为: \t" + (str11 == str22));
//false


//使用 == 比较str22和str33

System.out.println("str22 == str33 比较的结果为:\t" + (str22 == str33));
//true


//

System.out.println("str22 == str44 的比较结果为:\t" + (str22 == str44));
//false


//使用equals比较str11和str22

System.out.println("str11.equals(str22)的结果为:\t" + str11.equals(str22));
//true


//使用equals比较str22和str33

System.out.println("str22.equals(str33)的结果为:\t" + str22.equals(str33));
//true





//7、判断字符串是否为空的方式?

/*

*

*

*

*/

String val = null;

if(val == null)

System.out.println("String val is null");


val = "";

if(val.equals(""))

System.out.println("String val is equals \"\"");


if(val.length() == 0)

System.out.println("String val's length is zero");


//8、如何实现你对日期的格式化?

/*

*

* JDK1.5开始,String类的format()方法可以格式化日期变量

*

* %td 一个月的第几天

* %te 一个月的第几天

* %tm 月份

* %ty 年份

* %tY 4位年份

* %tj 一年中的第几天

* %ta %tA 星期

* %tb %tB 月份

*

*/

Date date = new Date();

System.out.println("默认日期格式:" + date);

System.out.println("一个月的哪一天: " + String.format("%te", date));

System.out.println("星期全称: " + String.format("%tA", date));


//9、时间变量格式化

/*

* %tH 两位24小时制的小时

* %tI 两位12小时的小时

* %tk

* %tl

* %tM 分钟

* %tS 秒

* %tL 毫秒

* %tN 毫微秒

* %tp am,pm

* %tZ 时区

* %ts 自1970-01-01 00:00:00到现在经过的秒数

* %tQ 毫秒数

*

*/

System.out.println("24小时制的小时: " + String.format("%tk", date));

System.out.println("时区: " + String.format("%tZ", date));



//10、日期与时间的组合格式化

/*

* %tR

* %tT

* %tr

* %tD =%tm%td%ty 02/28/2012

* %tF ISO 8601格式的日期

* %tc

*/

System.out.println("24小时的时间: " + String.format("%tR", date));

System.out.println("24小时的时间: " + String.format("%tT", date));

System.out.println("12小时制的时间: " + String.format("%tr", date));

System.out.println("英文写法的日期: " + String.format("%tD", date));

System.out.println("ISO 8601日期的格式: " + String.format("%tF", date));

System.out.println(">>: " + String.format("%tc", date));



//11、常规数据类型的格式化?

/*

* 类似C语言

*

* %b %B 布尔类型

* %c %C 字符串

* %s %S

* %d %o %x %X

* %e %E

* %% %符号

*/

System.out.println("浮点数: " + String.format("%E", 128000.56f));

System.out.println("浮点数: " + String.format("%e", 128000.56f));

System.out.println("整数: " + String.format("%d", 7756));

System.out.println("八进制整数: " + String.format("%o", 7756));

System.out.println("十六进制整数: " + String.format("%x", 7756));

System.out.println("十六进制整数: " + String.format("%X", 7756));


//12、正则表达式

/*

* String类的matches()方法

*

*/

String num = "0431-3385926";

System.out.println(num + " " + checkPhoneNumber(num));


//验证IP地址, 下面使用正则表达式

/*

* [abc] 表示a、b和c

* [^abc] 表示a、b和c除外

* [a-zA-Z] 字符集

* [a-d[m-p]] a-d或m-p

* [a-z&&[def]] d e f

* [a-z&&[^bc]] a-z中排除b c

* [a-z&&[^m-p]]

*/


Pattern pattern = Pattern.compile("\\b((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\.((?!\\d\\d\\d)\\d+|1\\d\\d|2[0-4]\\d|25[0-5])\\b");

Matcher matcher = pattern.matcher("127.400.600.2");
//以验证127.400.600.2为例

System.out.println(matcher.matches());

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






//日期

Pattern pattern1 = Pattern.compile("^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s(((0?[0-9])|([1-2][0-3]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?$");

Matcher matcher1 = pattern1.matcher("2000-02-29 23:59:59");

System.out.println(matcher1.matches());


//邮箱

Pattern pattern2 = Pattern.compile("^([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)$");

Matcher matcher2 = pattern2.matcher("hemmingway-@163.com");

System.out.println(matcher2.matches());



//13、字符串和数值类型的转换?

/*

*

*/

String s1 = "100";

String s2 = "253";

Integer int1 = Integer.parseInt(s1);

Integer int2 = Integer.parseInt(s2);



int ret = int1 + int2;

System.out.println("变量1: " + int1 + " 变量2:" + int2 + " 的和为:" + ret);


//14、去掉字符串中的空格

/*

*

*/

String s3 = "fdg dsl dfgds sdngds dsgdss";

String s4 = s3.replaceAll(" ", ""); //第一个参数是正则表达式子

System.out.println(s3 + ", " + s4);


//15、子字符串

/*

* substring

*

*/

String testStr = "lkssldf2011dsfgd36";

char[] chars = testStr.toCharArray();

boolean bool = Character.isDigit(chars[7]);

if(bool == true)

System.out.println("字符串: " + testStr + " 包含数字");


//16、



}



}