【Java基础20】字符串操作类,程序国际化,Math、Random、日期时间类,对象比较器,对象克隆,System和RunTime类数字处理工具类,MD5,JDK1.8新特性

一、字符串操作类

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(){}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值