一、字符串操作类
1、String字符串
import java.util.Arrays;
public class Test01{
public static void main(String[] args) {
// TODO Auto-generated method stub
String str=" qwerty1 234 ";
char c=str.charAt(3);//下标为3的字符
System.out.println(c);
System.out.println(str.toCharArray());//遍历
char[] s={'a','b','c'};
String str1=new String(s);//拷贝一份
String str2=new String(s,0,1);//拷贝0-1的字符
System.out.println(Arrays.toString(str.getBytes()));//遍历字节,文件读写单位是字节
System.out.println(str.startsWith("e"));//从第一个位置开始判断是否以指定的内容开始
System.out.println(str.startsWith("r", 1));//从第下标为1的位置开始判断是否以指定的内容开始
System.out.println(str.endsWith("t"));//判断是否以指定的内容结尾,可用于判断文件类型
System.out.println(str.replace('r', 'd'));//替换字符,将r替换为d
System.out.println(str.replaceAll("[0-9]", "*"));//regex正则表达式,将数字0-9替换为*
System.out.println(str.replaceAll("\\d", "*"));//"\d"代表数字
System.out.println(str.replaceFirst("\\d","*"));//替换第一个满足条件的字符
System.out.println(str.substring(1,3));//从下标1截取到下标3,不包括3
System.out.println(Arrays.toString(str.split("t")));//从t开始拆分字符串
System.out.println(str.contains("y"));//查找字符串是否存在,返回true,false
System.out.println(str.indexOf("t"));//查找返回索引
System.out.println(str.isEmpty());//判断字符串是否为空
System.out.println(str.length());
System.out.println(str.trim());//去掉前后空格
System.out.println(str.toLowerCase());//转换为小写
System.out.println(str.toUpperCase());//转换为大写
System.out.println(str.concat("5789"));//与另一个字符串拼接
}
}
2、StringBuffer类
StringBuffer的目的是解决字符串相加时带来的性能问题。
StringBuffer内部采用字符数组,默认长度是16,超过默认长度之后会扩充,扩充方式是length*2+2。
当可以预知添加的数据长度时,可以使用带参数的StringBuffer方法,以避免动态数组扩充。
适合在多线程中使用。
public class Test02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
StringBuffer sb=new StringBuffer();
sb.append("a").append("b").append(0);
System.out.println(sb.toString());
System.out.println(sb.reverse());//字符串反转
System.out.println(sb.delete(0, 1));//删除
System.out.println(sb.insert(1, "a"));//插入
System.out.println(sb.replace(1, 2, "*"));//替换
System.out.println(sb.substring(1));//截取
System.out.println(sb.indexOf("a"));//查询
}
}
3、StringBuilder类
StringBuffer的兄弟类,被设计用作为StringBuffer类的简易替换,用在字符串缓冲区被单个线程使用时,建议优先使用该类。
二、程序国际化
1、Locale类
根据用户的国家、地区、文化等来格式化该数值。
import java.util.Locale;
public class Test03 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Locale locale_CN=new Locale("zh","CN");
Locale locale_US=new Locale("en","US");
Locale locale_default=Locale.getDefault();//获取当前系统默认环境
}
}
2、ResourceBundle类
国际化的核心在于语言的显示上,通常的做法是将其定义为若干个属性文件(文件后缀是*.properties),属性文件中的格式采用“key=value”的格式进行操作。
表示一个资源文件的读取操作,所有的资源文件都需要用ResourceBundle类读取,读取时不需要加文件后缀。
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.Scanner;
public class Test03 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Locale locale_CN=new Locale("zh","CN");
Locale locale_US=new Locale("en","US");
Locale locale_default=Locale.getDefault();//获取当前系统默认环境
Scanner scan=new Scanner(System.in);
//用于绑定属性文件的工具类(参数:属性文件的前缀名)
ResourceBundle rb=ResourceBundle.getBundle("info",locale_US);
System.out.println(rb.getString("system.name"));
System.out.println(rb.getString("input.username"));
String username=scan.next();
System.out.println(rb.getString("input.password"));
String password=scan.next();
if("admin".equals(username)&&"123".equals(password)){
System.out.println(rb.getString("login.success"));
}else{
System.out.println(rb.getString("login.error"));
}
}
}
//info_en_US.properties文件
system.name=SMS
input.username=Input Username:
input.password=Input Password:
login.success=Login Success!
login.error=Login Error!
//info_zh_CN.properties文件,输入中文自动转换为UTF-8编码
system.name=\u5B66\u751F\u7BA1\u7406\u7CFB\u7EDF
input.username=\u8BF7\u8F93\u5165\u7528\u6237\u540D\uFF1A
input.password=\u8BF7\u8F93\u5165\u5BC6\u7801\uFF1A
login.success=\u767B\u5F55\u6210\u529F\uFF01
login.error=\u767B\u5F55\u5931\u8D25\uFF01
3、动态文本处理
properties文件里用{}写动态文字
import java.text.MessageFormat;
import java.util.Locale;
import java.util.ResourceBundle;
import java.util.Scanner;
public class Test03 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Locale locale_CN=new Locale("zh","CN");
Locale locale_US=new Locale("en","US");
Locale locale_default=Locale.getDefault();//获取当前系统默认环境
Scanner scan=new Scanner(System.in);
//用于绑定属性文件的工具类(参数:属性文件的前缀名)
ResourceBundle rb=ResourceBundle.getBundle("info");
System.out.println(rb.getString("system.name"));
System.out.println(rb.getString("input.username"));
String username=scan.next();
System.out.println(rb.getString("input.password"));
String password=scan.next();
if("admin".equals(username)&&"123".equals(password)){
System.out.println(rb.getString("login.success"));
String welcome=rb.getString("welcome");
welcome=MessageFormat.format(welcome, username);
System.out.println(welcome);
}else{
System.out.println(rb.getString("login.error"));
}
}
}
//info_en_US.properties文件
system.name=SMS
input.username=Input Username:
input.password=Input Password:
login.success=Login Success!
login.error=Login Error!
welcome=welcom{0}
//info_zh_CN.properties文件,输入中文自动转换为UTF-8编码
system.name=\u5B66\u751F\u7BA1\u7406\u7CFB\u7EDF
input.username=\u8BF7\u8F93\u5165\u7528\u6237\u540D\uFF1A
input.password=\u8BF7\u8F93\u5165\u5BC6\u7801\uFF1A
login.success=\u767B\u5F55\u6210\u529F\uFF01
login.error=\u767B\u5F55\u5931\u8D25\uFF01
welcome=\u6B22\u8FCE\u4F60\uFF0C{0}
三、Math、Random、日期时间类
1、Math类
Math类包含用于执行基本数学运算的方法,包括三角函数,平方根,圆周率等,它的所有方法都是静态方法。
两种使用方法:(1)直接使用(Math类包括在java.lang包中)
(2)静态导入
import static java.lang.Math.floor;//静态导入
public class Test04 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//直接使用
System.out.println(Math.PI);//返回pai值
System.out.println(Math.abs(-10));//返回绝对值
System.out.println(Math.random());//返回0-1之间的double值
System.out.println(Math.random()*1000/1000.0);//保留两位小数
System.out.println(Math.sqrt(2));//求平方根
//静态导入
System.out.println(floor(5.3));
}
}
2、Random类
//Random生成随机数
Random r=new Random();
System.out.println(r.nextDouble());
3、日期时间类
Date d=new Date();
java.sql.Date d1=new java.sql.Date(0);
System.out.println(d);
//参数是毫秒
// Date d2=new Date(long date);
Calendar c1=Calendar.getInstance();//可以使用calendar打印日历
int year=c1.get(Calendar.YEAR);
int month=c1.get(Calendar.MONTH);//月份从0开始
int day=c1.get(Calendar.DAY_OF_WEEK);
int hour=c1.get(Calendar.HOUR_OF_DAY);
int minute=c1.get(Calendar.MINUTE);
int second=c1.get(Calendar.SECOND);
StringBuilder sb=new StringBuilder();
System.out.println(sb.append(year).append("年").append(month).append("月").append(day).append("日 ").append(hour).append(":").append(minute).append(":").append(second));
DateFormat df=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss SSS");//标记,y-一个y显示一位,yyyy-四个y显示四位
System.out.println(df.format(new Date()));
}
四、对象比较器
Comparable接口,compareTo方法,比较对象的大小,小于返回负整数,等于返回0,大于返回正整数。
import java.util.Arrays;
import java.util.Comparator;
//自定义对象实现排序,可以使用实现Comparable接口的方式
public class Test05 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Pet[] pets={new Pet("大大",3),new Pet("小小",2),new Pet("中中",1)};
Arrays.sort(pets,new PetComparator());//对修改关闭,对扩展开放
System.out.println(Arrays.toString(pets));
}
}
class Pet implements Comparable<Pet>{
private String name;
private int age;
Pet(){}
Pet(String name,int age){
this.name=name;
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Pet [name=" + name + ", age=" + age + "]";
}
@Override
public int compareTo(Pet o) {
if(this.age<o.age) return -1;
if(this.age>o.age) return 1;
return 0;
}
}
class PetComparator implements Comparator<Pet>{
@Override
public int compare(Pet o1, Pet o2) {
// TODO Auto-generated method stub
return o1.getAge()-o2.getAge();
}
}
五、对象的克隆
当对象大小相同时,使用克隆技术会提高效率。
克隆的步骤:1、实现Cloneable接口(接口中没有方法,称为标记接口) 2、重写Object类中的clone方法
import java.util.Arrays;
//对象的克隆
public class Test06 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Pet1 pet=new Pet1("小小",3);
try{
Pet1 newPet=(Pet1)pet.clone();
System.out.println("pet="+pet);
System.out.println("newPet="+newPet);
}catch (Exception e) {
e.getStackTrace();
}
}
}
class Pet1 implements Cloneable{
private String name;
private int age;
Pet1(){}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Pet [name=" + name + ", age=" + age + "]";
}
public Pet1(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
protected Object clone() throws CloneNotSupportedException {
// TODO Auto-generated method stub
return super.clone();
}
}
六、System和RunTime类
Sysytem.exit(0);//退出虚拟机
System.out.println(System.getProperty("java.version"));//打印系统属性
RunTime rt=RunTime.getRunTime();
System.out.println("处理机数量:"+rt.availableProcessions()+"个");
//在单独的进程中执行指定的字符串命令
try{
rt.exec("notepad");//打开记事本
}catch(IOException e){
e.printStackTrace;
}
//加载C/C++编写的类库
System.loadLibrary(libname);
七、数字处理工具类
//整数BigInteger,小数BigDecimal
String str1="123456789076543";
String str1="909876543287653";
BigInteger b1=new BigInteger(str1);
BigInteger b2=new BigInteger(str2);
System.out.println(b1.add(b2));
//subtract,multiply,divide,reminder
//DecimalFormat-数据格式化
new DecimalFormat("0").format(pi);//取一位整数
new DecimalFormat("0.00").format(pi);//取一位整数两位小数
new DecimalFormat("00.000").format(pi);
new DecimalFormat("#").format(pi);//取所有整数部分
new DecimalFormat("#.##%").format(pi);//百分比计数并取两位小数
八、MD5工具类
MD5(Message-Digest Algorithm):信息摘要算法
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.Base64;
import java.util.Base64.Decoder;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
//MD5
public class Test07 {
public static void main(String[] args){
String password="123456";//明文
String savePassWord="4QrcOUm6Wau+VuBX8g+IPg==";//密文
try{
MessageDigest md=MessageDigest.getInstance("MD5");
//通过MD5计算摘要
byte[] by=md.digest(password.getBytes("UTF-8"));
System.out.println(Arrays.toString(by));
String mdStr=new String(by);
System.out.println(mdStr);
//0-9,A-Z,a-z------BASE64编码
//JDK1.8
String str=Base64.getEncoder().encodeToString(by);
System.out.println(str);
//JDK1.8之前
BASE64Encoder encorder=new BASE64Encoder();
String str3=encorder.encode(by);
//解码
BASE64Decoder decorder=new BASE64Decoder();
byte[] by1=decorder.decodeBuffer(str3);
System.out.println(Arrays.toString(by1));
}catch(NoSuchAlgorithmException e){
e.printStackTrace();
}catch(UnsupportedEncodingException e){
e.printStackTrace();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
九、JDK1.8新特性
1、lambda表达式
类名 对象名=(参数)->{System.out.println(" ");};
代码简洁,不会额外生成匿名内部类。
2、接口中的默认方法和静态方法
interface{
public default void print(){}
public static void print1(){}
}