day11_API:String类,StringBuffer类,正则表达式,包装类拆箱和装箱

String

创建方法不同,存储方式不同

public class TestString {

	public static void main(String[] args) {
		//创建对象方法一,在常量池中,相同值的地址是相同的
		String s1 = "hello";
		String s4 = "hello";
		String s5 = "abc";
		
		//创建对象方法二,在堆里
		String s2 = new String();//创建一个空串
		String s3 = new String("hello");
		
    	//结果为false
		System.out.println(s1 == s3);
		
		//结果为true
		System.out.println(s1 == s4);
	}

}

String类常用方法

//--------------------------------------------------------
		//String 不可变类
		String s = "hello";
		//连接字符串
		s.concat("tom");
		//s对应的对象不能改,还是hello
		System.out.println(s);
		
		//需要创建新的对象,引用指向新的对象
		s= s.concat("tom");
		System.out.println(s);
		
		//--------------------------------------------------------
		//字符串的长度也就是字符的个数,hellotom,
		System.out.println(s.length());
		//--------------------------------------------------------
		//两个字符串的值是否相等
		String str1 = "hello";
		String str2 = "hello";
		String str3 = new String("hello");
		
		System.out.println(str1.equals(str2));//true
		System.out.println(str1.equals(str3));//true
		//区分大小写
		System.out.println(str1.equals("Hello"));//false
		
		//--------------------------------------------------------
		//忽略大小写
		System.out.println(str1.equalsIgnoreCase("Hello"));//true
		//转为大写
		System.out.println("HELLo".toUpperCase());//HELLO
		//转为小写
		System.out.println("HELLo".toLowerCase());//hello
		
		//--------------------------------------------------------
		//索引从0开始
		String sg = "hellohello";
		//参数字符串在原字符串对象中第一次出现的位置索引
		System.out.println(sg.indexOf('e'));//1
		System.out.println(sg.indexOf("he"));//0
		//不存在返回-1
		System.out.println(sg.indexOf("abc"));//-1
		System.out.println(sg.lastIndexOf("he"));//5
		
		//--------------------------------------------------------
		
		String sg1 = "hellohello";
		//返回参数位置对应的字符char
		System.out.println(sg1.charAt(1));//e
		
		
		String sg2 = "helloabc";
		//取子串,从参数位置取到末尾
		System.out.println(sg2.substring(5));//abc
		
		//取子串,从第一个参数位置开始取到第二个参数的前一位【);
		System.out.println(sg2.substring(0,5));//hello
		
		//--------------------------------------------------------
		//去除首尾空格
		String sg3 = "        h     e   l     l     o       ";
		System.out.println(sg3.trim());//h     e   l     l     o

		
		//字符串替换(旧的字符串,新的字符串)
		String sg4 = "helloabc";
		System.out.println(sg4.replace("hello", "你好"));//你好abc
		//去掉字符串中所有的空格,用空串替换空格
		System.out.println(sg3.replace(" ", ""));//hello
		
		//--------------------------------------------------------
		//判断是不是java文件
		String  sg5 = "abc.java";
		//是否以指定字符串结尾
		System.out.println(sg5.endsWith("java"));//true
		//是否以指定字符串开头
		System.out.println(sg5.startWith("abc"));//true
		
		//--------------------------------------------------------
		//比较字符串大小
		String sg6 = "hello";
		String sg7 = "abc";
		//比较对象在比较的参数之前,返回负数,之后返回正数,相等返回0
		System.out.println(sg6.compareTo(sg7));//7
		System.out.println("xxx".compareTo("aaa"));//23
		System.out.println("xxx".compareTo("xxx"));//0
		

		//--------------------------------------------------------
		//是否包含指定参数的字符串
		System.out.println("hello".contains("ello"));//true
		
		//把字符串转换成字符数组
		char [] c = "hello".toCharArray();
		System.out.println(Arrays.toString(c));//[h, e, l, l, o]
		
		//分割,用参数分隔成数组
		String  [] strs = "aa bb cc dd ee ff".split(" ");
		System.out.println(strs.length);
		//遍历输出验证
		for(String ss : strs){
			System.out.println(ss);
		}
		
		
		
		
	}

}

StringBuffer类的方法

可变类

在字符串的值频繁更改时,用StringBuffer可以提高效率

package day18;

import java.util.Scanner;

public class TestStringBuffer {

	public static void main(String[] args) {
		StringBuffer sf = new StringBuffer();//空串16个字符大小的缓冲区
		System.out.println(sf.capacity());
		//超16会扩容,大约成倍
		sf.append("hellllllllllllllllllllllllllllllllllllllllllllllo00000000000000000000000000000000000000000000000000000");
		System.out.println(sf.capacity());
		
		StringBuffer sf1 = new StringBuffer();//空串16个字符大小的缓冲区
		System.out.println(sf1.capacity());//16
		sf1.append("hell0");
		//缩小缓冲数组大小
		sf1.trimToSize();
		System.out.println(sf1.capacity());//5
		
		//可以自己设置缓冲数组容量的大小
		StringBuffer sf2 = new StringBuffer(100);//给出最大值容量
		System.out.println(sf2.capacity());//100
		
		//append方法
		StringBuffer sr = new StringBuffer("hello");//给出最大值容量
		sr.append("tom");
		System.out.println(sr);//hellotom
		char [] c ={'a','b','c'};
		//(字符数组,起始位置,几个字符)
		sr.append(c,1,2);
		System.out.println(sr);//hellotombc
		
		//-------------------------------------------
		//在指定的位置插入一个字符串
		sr.insert(5, "您好");
		System.out.println(sr);//hello您好tombc
		//修改某个位置的字符
		sr.setCharAt(5, '你');//
		System.out.println(sr);//hello你好tombc
		//删除指定位置的字符
		sr.deleteCharAt(5);
		System.out.println(sr);//hello好tombc
		//删除某一部分字符序列【起始位置,终止位置)
		sr.delete(6, 9);
		System.out.println(sr);//hello好bc
		//反转字符串
		sr.reverse();
		System.out.println(sr);//cb好olleh
		
		//转换为String类型
		String strr = sr.toString();
		
		//String 转为StringBuffer
		Scanner input = new Scanner(System.in);
		System.out.println("输入一行字符串");
		String str = input.next();
		StringBuffer sff = new StringBuffer(str);

	}
	

}

















String ,StringBuffer,StringBuilder的区别:

  1. String 不可变字符串类: 表示一个字符串,用String
    字符串的值频繁修改,用String效率低,需要不断创建新的对象,那就选择用StringBuffer,StringBuilder

  2. StringBuffer,StringBuilder可变字符串,StringBuffer是安全的,速度慢;StringBuilder非安全,速度快

正则表达式

用某种模式去匹配指定字符串的一种方式

优点:

  1. 简介的代码
  2. 严谨地验证文本框的内容

符号

符号描述
\D非数字字符匹配。等效于 [^0-9]
\d数字字符匹配。等效于 [0-9]。
\W与任何非单词字符匹配。与"[^A-Za-z0-9_]"等效。
\w匹配任何字类字符,包括下划线。与"[A-Za-z0-9_]"等效。
.除了换行以外的任意字符
符号描述
{n}n 是非负整数。正好匹配 n 次。
{n,m}m 和 n 是非负整数,其中 n <= m。匹配至少 n 次,至多 m 次。
*零次或多次匹配前面的字符或子表达式。例如,zo* 匹配"z"和"zoo"。* 等效于 {0,}。
+一次或多次匹配前面的字符或子表达式。
?除了换行以外的任意字符

语法
定义正则表达式:Pattern.compile(regString)
表达式的模式
验证

package day18;

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**正则表达式 */

public class Ex4 {

	public static void main(String[] args) {
		//1.设置正则表达式
//		Pattern p = Pattern.compile("[0-9]{6}");
//		Pattern p = Pattern.compile("\\d{6}");
//		//2.设置要验证的数据
//		Matcher m = p.matcher("123456");
//		//3.验证
//		System.out.println(m.matches());
		
		
		
		Pattern p = Pattern.compile("1\\d{10}");
		Scanner input = new Scanner(System.in);
		System.out.println("请输入十一位的电话号码");
		String tel = input.next();
		Matcher m = p.matcher(tel);
		System.out.println(m.matches());
		
		System.out.println("请输入密码:");
		String passwd = input.next();
		Pattern p1 = Pattern.compile("\\w{4,10}");
		Matcher m1 = p1.matcher(passwd);
		System.out.println(m1.matches());
		
		
		System.out.println("请输入用户名");
		String name = input.next();
		Pattern p2 = Pattern.compile("[a-zA-z][a-zA-Z0-9]{3,15}");
		Matcher m2 = p2.matcher(name);
		System.out.println(m2.matches());
	
		
	}

}

包装类拆箱,装箱

八种基本数据类型

byte Byte

char Character

int Integer

装箱:基本数据类型包装成对象;基本数据类型 -》类类型

拆箱:把对象中的值取出;类类型 -》基本类型

Date类

  • API
    文档中的大部分方法均已过时,不建议使用
  • 日期格式应该使用SimpleDateFormat类;
  • 提取时间分量的方法应该使用Calendar类
package day18;

import java.security.Timestamp;
import java.sql.Date;
import java.sql.Time;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.NumberFormat;

public class TestDate {

	public static void main(String[] args) {
		//-----------------------父类java.util--------------------------
		java.util.Date date = new java.util.Date();
		System.out.println(date);
		
		System.out.println(date.getTime());
//		System.out.println(System.currentTimeMillis());
		//记录当时的瞬间
		java.util.Date date1 = new java.util.Date(1526978531991L);
		System.out.println(date1);
		//------------------子类java.sql------------------------------
		Date d1 = new Date(date.getTime());
		//将日期转换为字符串
		String sd1 = d1.toString();
		System.out.println(d1);//2018-05-22
		System.out.println(sd1);//
		//将字符串转换为date类型
		d1 = Date.valueOf(sd1);
		
		Time t1 = new Time(date.getTime());
		System.out.println(t1);
//		Timestamp tp1 = new Timestamp(date.getTime());
//		System.out.println(tp1);
		
		//--------------------格式化--------------------------
		//数字
		//NumberFormat
		NumberFormat nf1 = NumberFormat.getInstance();//当前缺省的数字格式化方式进行格式化
		System.out.println(nf1.format(12.234455));
		
		nf1 = NumberFormat.getCurrencyInstance();//当前缺省的货币格式化方法
		System.out.println(nf1.format(24.45645));
		
		//子类DecimalFormat
		DecimalFormat df1 = new DecimalFormat("00.00");
		System.out.println(df1.format(4.45645));
		
		//日期格式化
		DateFormat f1 = DateFormat.getInstance();
		System.out.println(f1.format(date));
		DateFormat f2 = DateFormat.getDateInstance();//日期
		System.out.println(f2.format(date));
		
		f1 = DateFormat.getDateInstance(DateFormat.SHORT);//短日期形式
		System.out.println(f1.format(date));
		
		f1 = DateFormat.getDateInstance(DateFormat.MEDIUM);//中日期形式
		System.out.println(f1.format(date));
		
		f1 = DateFormat.getDateInstance(DateFormat.LONG);//长日期形式
		System.out.println(f1.format(date));
		
		
		f1 = DateFormat.getDateInstance(DateFormat.FULL);//完整日期形式
		System.out.println(f1.format(date));
		
		
		//时间实例
		f1 = DateFormat.getTimeInstance();
		System.out.println(f1.format(date));
		
		//日期时间实例
		f1= DateFormat.getDateTimeInstance();
		System.out.println(f1.format(date));
		
		f1= DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL);
		System.out.println(f1.format(date));
	}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值