public static String leftPad(String str,int length,char ch){
//数组长度与所要的长度一样。
char[] chs = new char[length];
//把数组chs数组中每个位置上都替换成ch。
Arrays.fill(chs, ch);
System.out.println(Arrays.toString(chs));
//把字符串转换成一个char数组
char[] src = str.toCharArray();
/**
* 参数:
src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目标数据中的起始位置。
length - 要复制的数组元素的数量。
*/
System.arraycopy(src, 0, chs,
length-src.length, src.length);
return new String(chs);
}
第三方包的使用
1 在项目文件夹下创建文件夹 lib
2 复制 *.jar文件到 lib
3 配置jar文件到项目的CLASSPATH中
选择项目->File->Properties
-> Java Build Path-> Libraries
-> add JARs
commons-lang-2.5.jar这个jar包下包含大量实用的小工具。是apach开源的
时间日期
1 java 中基本的时间表示 long //是指从1970年到现在的毫秒数
2 Java提供了Date类型表示时间和日期
Date 是long类型的包装
3 Calendar 是历法的的抽象.
历法: 公历, 农历, 太阳历, ...
GregorianCalendar 是历法的实现, 采用公历
(太阳历) 算法实现的.
Calender cal = Calender.getInstance();
4 new Date(long)
date.setTime(long) cal.setTime(Date);
----------> --------->
long <---------- Date <--------- Calendar
date.getTime() cal.getTime()
long time = 0;//1970 1 1
Date date = new Date(); //当前时间
date.setTime(time);// 1970 1 1
Calendar cal =
new GregorianCalendar();//当前时间
cal.setTime(new Date(time));// 1970 1 1
Date d = cal.getTime();
long l = cal.getTime().getTime();//0
5 Date 和 Calendar 的默认值就是当前时间
6 日期的计算
如: 计算商品的促销日期:
输入: 商品生产日期, 和保质期月份
返回: 商品的促销日期, 是过期前两周周的周五
7 日期的输入与输出(以下两段代码实现了输入与输出)
日期格式化:
//DateFormat只是一个格式化的类,具体按照公历,太阳历格式化要具体实现类
//SimpleDateFormat是其中一个简单的实现
/**
* java.text
类 DateFormat
java.lang.Object
java.text.Format
java.text.DateFormat
所有已实现的接口:
Serializable, Cloneable
直接已知子类:
SimpleDateFormat
*/
DateFormat fmt = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
//DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String string = fmt.format(date);
System.out.println(string);
以下为经典的格式化,记住:
java.text.SimpleDateFormat fmt =
new SimpleDateFormat("yyyy-MM-dd");
构建SimpleDateFormat 一般提供日期的格式
"yyyy-MM-dd" 具体参看 javadoc
如: "yyyy-MM-dd HH:mm:ss"
"yyyyMMdd"
"dd/MM/yyyy"
"MM/dd/yyyy"
//这个十分有用,可以把从前台得到的字符串转换成相应的时间类型,十分好,正好用在jobsys上。
//这个把前台转过来的字符串转换成了日期类型,十分伟大。十分厉害 。正好 用在jobsys上。
String string2 = "1997-6-7";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date2 = format.parse(string2);
System.out.println("date2:"+date2);
//如果输入一个long类型,那么先把它转换(parse)成DATE再输出。
//如果输入一个Calendar类型,那么先把它转换(parse)成DATE再输出。
//用java自带的类实现
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = new GregorianCalendar();
System.out.println("calendar:"+format.format(calendar.getTime()));
//使用 commons lang 格式化日期.十分让人振奋人心。
String string3 = DateFormatUtils.format(calendar,"yyyy-MM-dd");
System.out.println("用DateFormatUtils格式化:"+string3);
fmt.parse(String)可以实现将(合法)字符串解
析为日期类型, 经常用于处理日期输入.
fmt.format(Date) 可以把日期格式化为字符串
用于输出处理.
last:日期计算问题 用Calender这个类提供了十分方便而复杂的方法。
内部类- 定义在类的内部的类, 根据位置分为4类
1 静态内部类:使用static修饰,声明在类体中,可以使用
外部类类名访问,在类内部可以省略类名。静态内部类中
可以访问外部类的静态成员。
//静态内部类只要这个类装载以后就能够用了,而且能够访问这个类的静态资源。
2 成员内部类: 声明在类体中,不使用static,具有类的成员特征
也就是,必须有类的实例才能创建内部类实例。内部类实例
可以访问共享外部类的成员变量。很常用。
如:链表的节点就可以定义为内部类如android中的handler.
3 局部内部类:把类声明在方法中,就是局部内部类,作用域
类似局部变量。很少见。
4 匿名内部类,匿名类:非常常见,可以写在任何地方,就行一般的语句。
语法更象是创建对象:
Date d = new Date(){};
匿名类是对原类的一个继承,同时创建了实例,{} 就是继承
以后的类体。类体中可使用所有类的语法。
匿名类不能写构造器。
匿名类可以从抽象类或者接口继承,
必须提供抽象方法的实现。
5 任何内部类都编译成独立的class文件
6 最大的作用:封装!内部类很少在外部使用.
7 通过实例简单理解记忆语法.
*在今后的案例中灵活练习内部类
/**AnnInnerClassDemo.java
* 这个例子能够说明两个问题
* 第一、继承问题,当我们继承一个类的时间,在调用方法的时侯,如果这个
* 方法没有被覆盖,也就是在子类中没有被重写,那么就会调用父类的方法
* 如果这个方法被重写就会调用子类的方法,这个就是方法的动态绑定。
* 属性不能被覆盖,JVM不会调用被重写的属性,如果想要访问子类的属性
* 需要写一个setter方法。参看第九天:java动态绑定在属性和方法上的不同.txt
* 第二、匿名内部类的实质是继承,不加{}就是new一个对象,如果加{}就是
继承这个抽象类,如果匿名内部类new的一个接口,那么它就是实现接口,所以要
实现接口里面的方法。其实这就是android中的Handler的原理所在。
只要一加{}就是匿名内部类。且记,否则就是new一个新的对象 。
*
*/
/**
//char的序列
CharSequence charSequence = new CharSequence() {
@Override
public CharSequence subSequence(int start, int end) {
// TODO Auto-generated method stub
return null;
}
@Override
public int length() {
// TODO Auto-generated method stub
return 10;
}
@Override
public char charAt(int index) {
// TODO Auto-generated method stub
return 'A';
}
};
StringBuilder stringBuilder = new StringBuilder(charSequence);
System.out.println(stringBuilder);
这个方法说尽了android的精华。
写一个匿名内部类,在new StringBuilder(charSequence)的时间
回调了前两个方面,赋值给stringBuilder。
我们知道在android中,非常多的匿名内部类,然后有一个相应的引用 ,当其它
地方调用时间,它就会回调这个接口里面的相应方法,具体调用哪个如何调用由java底层决定 。
*/
String[] strs = {"abcff", "abc", "acde", "a"};
Arrays.sort(strs, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
String s1 = (String)o1;
String s2 = (String)o2;
return s1.length() - s2.length();
}
});
System.out.println(Arrays.toString(strs));
这个方法又有非常多的好处,首先java有直接可以排序的类,用Arrays.sort()方法,
而且我们可以自己定义排序规则,Comparator(),例如可用行扑克排序。
而且最后我们在打印数组的时间,不用再写什么循环了,用Arrays.toString(strs)即可。
预习:
Java的集合框架
//数组长度与所要的长度一样。
char[] chs = new char[length];
//把数组chs数组中每个位置上都替换成ch。
Arrays.fill(chs, ch);
System.out.println(Arrays.toString(chs));
//把字符串转换成一个char数组
char[] src = str.toCharArray();
/**
* 参数:
src - 源数组。
srcPos - 源数组中的起始位置。
dest - 目标数组。
destPos - 目标数据中的起始位置。
length - 要复制的数组元素的数量。
*/
System.arraycopy(src, 0, chs,
length-src.length, src.length);
return new String(chs);
}
第三方包的使用
1 在项目文件夹下创建文件夹 lib
2 复制 *.jar文件到 lib
3 配置jar文件到项目的CLASSPATH中
选择项目->File->Properties
-> Java Build Path-> Libraries
-> add JARs
commons-lang-2.5.jar这个jar包下包含大量实用的小工具。是apach开源的
时间日期
1 java 中基本的时间表示 long //是指从1970年到现在的毫秒数
2 Java提供了Date类型表示时间和日期
Date 是long类型的包装
3 Calendar 是历法的的抽象.
历法: 公历, 农历, 太阳历, ...
GregorianCalendar 是历法的实现, 采用公历
(太阳历) 算法实现的.
Calender cal = Calender.getInstance();
4 new Date(long)
date.setTime(long) cal.setTime(Date);
----------> --------->
long <---------- Date <--------- Calendar
date.getTime() cal.getTime()
long time = 0;//1970 1 1
Date date = new Date(); //当前时间
date.setTime(time);// 1970 1 1
Calendar cal =
new GregorianCalendar();//当前时间
cal.setTime(new Date(time));// 1970 1 1
Date d = cal.getTime();
long l = cal.getTime().getTime();//0
5 Date 和 Calendar 的默认值就是当前时间
6 日期的计算
如: 计算商品的促销日期:
输入: 商品生产日期, 和保质期月份
返回: 商品的促销日期, 是过期前两周周的周五
7 日期的输入与输出(以下两段代码实现了输入与输出)
日期格式化:
//DateFormat只是一个格式化的类,具体按照公历,太阳历格式化要具体实现类
//SimpleDateFormat是其中一个简单的实现
/**
* java.text
类 DateFormat
java.lang.Object
java.text.Format
java.text.DateFormat
所有已实现的接口:
Serializable, Cloneable
直接已知子类:
SimpleDateFormat
*/
DateFormat fmt = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
//DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String string = fmt.format(date);
System.out.println(string);
以下为经典的格式化,记住:
java.text.SimpleDateFormat fmt =
new SimpleDateFormat("yyyy-MM-dd");
构建SimpleDateFormat 一般提供日期的格式
"yyyy-MM-dd" 具体参看 javadoc
如: "yyyy-MM-dd HH:mm:ss"
"yyyyMMdd"
"dd/MM/yyyy"
"MM/dd/yyyy"
//这个十分有用,可以把从前台得到的字符串转换成相应的时间类型,十分好,正好用在jobsys上。
//这个把前台转过来的字符串转换成了日期类型,十分伟大。十分厉害 。正好 用在jobsys上。
String string2 = "1997-6-7";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date2 = format.parse(string2);
System.out.println("date2:"+date2);
//如果输入一个long类型,那么先把它转换(parse)成DATE再输出。
//如果输入一个Calendar类型,那么先把它转换(parse)成DATE再输出。
//用java自带的类实现
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = new GregorianCalendar();
System.out.println("calendar:"+format.format(calendar.getTime()));
//使用 commons lang 格式化日期.十分让人振奋人心。
String string3 = DateFormatUtils.format(calendar,"yyyy-MM-dd");
System.out.println("用DateFormatUtils格式化:"+string3);
fmt.parse(String)可以实现将(合法)字符串解
析为日期类型, 经常用于处理日期输入.
fmt.format(Date) 可以把日期格式化为字符串
用于输出处理.
last:日期计算问题 用Calender这个类提供了十分方便而复杂的方法。
内部类- 定义在类的内部的类, 根据位置分为4类
1 静态内部类:使用static修饰,声明在类体中,可以使用
外部类类名访问,在类内部可以省略类名。静态内部类中
可以访问外部类的静态成员。
//静态内部类只要这个类装载以后就能够用了,而且能够访问这个类的静态资源。
2 成员内部类: 声明在类体中,不使用static,具有类的成员特征
也就是,必须有类的实例才能创建内部类实例。内部类实例
可以访问共享外部类的成员变量。很常用。
如:链表的节点就可以定义为内部类如android中的handler.
3 局部内部类:把类声明在方法中,就是局部内部类,作用域
类似局部变量。很少见。
4 匿名内部类,匿名类:非常常见,可以写在任何地方,就行一般的语句。
语法更象是创建对象:
Date d = new Date(){};
匿名类是对原类的一个继承,同时创建了实例,{} 就是继承
以后的类体。类体中可使用所有类的语法。
匿名类不能写构造器。
匿名类可以从抽象类或者接口继承,
必须提供抽象方法的实现。
5 任何内部类都编译成独立的class文件
6 最大的作用:封装!内部类很少在外部使用.
7 通过实例简单理解记忆语法.
*在今后的案例中灵活练习内部类
/**AnnInnerClassDemo.java
* 这个例子能够说明两个问题
* 第一、继承问题,当我们继承一个类的时间,在调用方法的时侯,如果这个
* 方法没有被覆盖,也就是在子类中没有被重写,那么就会调用父类的方法
* 如果这个方法被重写就会调用子类的方法,这个就是方法的动态绑定。
* 属性不能被覆盖,JVM不会调用被重写的属性,如果想要访问子类的属性
* 需要写一个setter方法。参看第九天:java动态绑定在属性和方法上的不同.txt
* 第二、匿名内部类的实质是继承,不加{}就是new一个对象,如果加{}就是
继承这个抽象类,如果匿名内部类new的一个接口,那么它就是实现接口,所以要
实现接口里面的方法。其实这就是android中的Handler的原理所在。
只要一加{}就是匿名内部类。且记,否则就是new一个新的对象 。
*
*/
/**
//char的序列
CharSequence charSequence = new CharSequence() {
@Override
public CharSequence subSequence(int start, int end) {
// TODO Auto-generated method stub
return null;
}
@Override
public int length() {
// TODO Auto-generated method stub
return 10;
}
@Override
public char charAt(int index) {
// TODO Auto-generated method stub
return 'A';
}
};
StringBuilder stringBuilder = new StringBuilder(charSequence);
System.out.println(stringBuilder);
这个方法说尽了android的精华。
写一个匿名内部类,在new StringBuilder(charSequence)的时间
回调了前两个方面,赋值给stringBuilder。
我们知道在android中,非常多的匿名内部类,然后有一个相应的引用 ,当其它
地方调用时间,它就会回调这个接口里面的相应方法,具体调用哪个如何调用由java底层决定 。
*/
String[] strs = {"abcff", "abc", "acde", "a"};
Arrays.sort(strs, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
String s1 = (String)o1;
String s2 = (String)o2;
return s1.length() - s2.length();
}
});
System.out.println(Arrays.toString(strs));
这个方法又有非常多的好处,首先java有直接可以排序的类,用Arrays.sort()方法,
而且我们可以自己定义排序规则,Comparator(),例如可用行扑克排序。
而且最后我们在打印数组的时间,不用再写什么循环了,用Arrays.toString(strs)即可。
预习:
Java的集合框架