字符串是由多个字符组成的一串数据(字符序列)的字符串常量,java中所有字符串都是String类的实例
两种创建形式●第一种:
String s = "abc";
先在栈中创建一个对String类的对象引用变量s,然后去字符串常量池中查找有没有"abc", 如果没有则在常量池中添加”abc”, s引用变量指向常量池中的”abc”,如果常量池中有,则直接指向改地址即可,不用重新创建
●第二种:
一概在堆中创建新对象,值存储在堆内存的对象中
String s = new String("abc");
public static void main(String[] args) {
String s = "abc";
String s1 = "abc";
System.out.println(s==s1);//true
System.out.println(s.equals(s1));//true
String s3 = new String("abc");
String s4 = new String("abc");
System.out.println(s3==s4);//false
System.out.println(s3.equals(s4));//true
}
判断
String s1 = "abc";
String s2 = new String("abC");
System.out.println(s1.equals(s2));//比较字符串内容是否相等
System.out.println(s1.equalsIgnoreCase(s2));//比较字符串内容是否相等(忽略大小写)
System.out.println(s1.contains("c"));//是否包含指定的子串
System.out.println(s1.isEmpty());//判断是否为空("")
System.out.println(s1.startsWith("ab"));//判断以指定字符串开头
System.out.println(s1.endsWith("bc"));//判断以指定字符串结尾
String s3 = "abc";
String s4 = "efg";
System.out.println(s3.compareTo(s4));//字符串比大小
获取
String s = "abcdefgd";
// 01234567
System.out.println(s.length());
char c = s.charAt(4);//获取指定位置(索引)的字符
System.out.println(c);
int index = s.indexOf("d");//从前向后找 只找首次出现的位置
System.out.println(index);
int index1 = s.indexOf("d",index+1);//从前向后找 从指定位置开始
System.out.println(index1);
int index2 = s.lastIndexOf("d");//从后向前查找,首次出现的位置
System.out.println(index2);
String s1 = "abcdefgd";
// 01234567
String s2 = s1.substring(3);//从指定的为开始截取字符串,直接到最后一位,最终返回一个新的字符串对象
System.out.println(s1);
System.out.println(s2);
String s3 = s1.substring(2,6);//截取指定区间 包含开始位置,不包含结束位置
System.out.println(s3);
}
转换
byte[] getBytes()
char[] toCharArray()
static String valueOf(char[] chs)
String toLowerCase()
String toUpperCase()
String concat(String str)
Stirng[] split(分割符);
public static void main(String[] args) throws UnsupportedEncodingException {
//byte[] getBytes()
String 字符串转化为字节码
字节码再转化成字符串
String s = "你好";//默认是utf-8编码 在utf-8编码中,一个汉字占3个字节
byte[] b = s.getBytes("UTF-8");//编码
System.out.println(Arrays.toString(b));
String s1 = new String(b,"UTF-8");//解码
System.out.println(s1);
String s1 = new String(b,3,3,"UTF-8");//解码
System.out.println(s1);
//char[] toCharArray()
String 字符串转化为char数组
char 数组转化回字符串
String s = "abcd";
char[] chars = s.toCharArray(); //将字符串转换为一个新的char数组
System.out.println(Arrays.toString(chars));
String s1 = new String(chars); //将char数组 转为字符串
System.out.println(s1);
String s2 = String.valueOf(chars);
System.out.println(s2);
//转换大小写
String s3 = "abcdEFG一";
System.out.println(s3.toUpperCase());//转大写
System.out.println(s3.toLowerCase());//转小写
String s4 = "ab&cde&efg";
String[] strings = s4.split("&");//按照指定的分隔符,将字符串拆分为数组
System.out.println(Arrays.toString(strings));
}
替换
String replace(char old,char new)
String replace(String old,String new)
replaceAll(String regex, String replacement)
replaceFirst(String regex, String replacement)
String s = " abcdef cg ";
String s1 = s.replace("cd", "CC");
System.out.println(s1);
System.out.println(s.length());
System.out.println(s.trim());//去除字符串前后的空格
split(String regex)
replaceAll(String regex, String replacement)
replaceFirst(String regex, String replacement)
String s0 = "ab5cd2ef3g";
String[] ss = s0.split("\d");
System.out.println(Arrays.toString(ss));
String s0 = "abc33d2e44cdg";
String s00 = s0.replaceAll("\d", "CC");
System.out.println(s00);
String s2 = s0.replaceFirst("cd", "CC");
System.out.println(s2);
正则表达式
正则表达式: 规则表达式, 使用一些特定的符号来制定一个规则
使用此规则与一个字符串进行模式匹配, 匹配成功返回true,否则返回false
输入手机号,验证输入的内容是一个手机号格式(11位数字 1开头)
String s = "3123123213"; 验证手机格式,需要判断每一个字符是否符合要求
基础语法 Pattern p = Pattern.compile("a*b");//定义一个规则
Matcher m = p.matcher("aaaab");//输入内容
boolean b = m.matches();//匹配
System.out.println(b);
规则
实例
//验证手机号 qq号 数字 6-12 0不能开头
//String phone = "13000000001";
//System.out.println(phone.matches("1[35789]\d{9}"));
//String qq = "90000000";
//System.out.println(qq.matches("[1-9]\d{5,11}"));
String s = "qSDSw21_321e";
//System.out.println(s.matches("[a-z]+"));
//System.out.println(s.matches("[a-zA-Z]+"));
//System.out.println(s.matches("[A-z]+"));
//System.out.println(s.matches("\w+")); //w [a-zA-Z_0-9]
//邮箱格式 .表示任何字符 \.进行转义 | 或
String email = "qr3423421@sina.com.cn";
System.out.println(email.matches("\w{6,18}@\w{2,5}\.(com|com\.cn)"));
StringBuffer和StringBuilder
StringBuffer线程安全的,值可变的字符串(指的是底层char[]的值在变)
char[] value; AbstractStringBuilder(int capacity) { value = new char[capacity]; } super(16); super(str.length() + 16);
当向StringBuffer中添加内容时,是将内容添加到底层的数组中,数组没有被final修饰 当数组装满时,会创建一个新的数组,将新数组地址给底层数组,StringBuffer对象是不会改变的
StringBuilder线程不安全的,值可变的字符串
//new StringBuffer(30);
//new StringBuffer();// 默认底层char数组长度是16
StringBuffer stringBuffer = new StringBuffer("abcdefg");//23
//stringBuffer.insert(2,"xx");//向指定的位置插入字符串
//stringBuffer.deleteCharAt(1);
//stringBuffer.delete(0,3);//删除指定区间的内容 包含开始,不包含结束
//stringBuffer.replace(0,3, "XXX");//替换
//stringBuffer.reverse();//逆序字符串
//String sub = stringBuffer.substring(2);//截取一个字符串副本返回
//String sub = stringBuffer.substring(2,5);//截取一个字符串副本返回
//System.out.println(sub);
System.out.println(stringBuffer);
String s1 = "abcd";
System.out.println(s1.length());//4
System.out.println(stringBuffer.length());//返回的是底层数组中实际转入的字符个数
stringBuffer.append("efg111");
//new StringBuffer(30);
//new StringBuffer();// 默认底层char数组长度是16
StringBuffer stringBuffer = new StringBuffer("abcdefg");//23
//stringBuffer.insert(2,"xx");//向指定的位置插入字符串
//stringBuffer.deleteCharAt(1);
//stringBuffer.delete(0,3);//删除指定区间的内容 包含开始,不包含结束
//stringBuffer.replace(0,3, "XXX");//替换
//stringBuffer.reverse();//逆序字符串
//String sub = stringBuffer.substring(2);//截取一个字符串副本返回
//String sub = stringBuffer.substring(2,5);//截取一个字符串副本返回
//System.out.println(sub);
System.out.println(stringBuffer);
String s1 = "abcd";
System.out.println(s1.length());//4
System.out.println(stringBuffer.length());//返回的是底层数组中实际转入的字符个数
stringBuffer.append("efg111");
String、StringBuffer和StringBuilder的对比
String、StringBuffer和StringBuilder适用场景
String:是字符常量,适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
Math类●java.lang.Math提供了一系列静态方法用于科学计算
其方法的参数和返回值类型一般为double型
abs 绝对值
sqrt 平方根
pow(double a, double b) a的b次幂
max(double a, double b)
min(double a, double b)
random() 返回 0.0 到 1.0 的随机数
long round(double a) double型的数据a转换为long型(四舍五入)
System.out.println(Math.PI); System.out.println(Math.abs(-1)); System.out.println(Math.sqrt(9)); System.out.println(Math.random());//返回0-1之间随机数 System.out.println(Math.floor(9.9));//向下取整 System.out.println(Math.ceil(9.1));//向上取整 System.out.println(Math.round(9.6));//四舍五入Random类
●Random类概述:
此类用于产生随机数
●构造方法:
public Random()
●成员方法:
public int nextInt()
public int nextInt(int n)
Random r = new Random(); //System.out.println(r.nextInt());//在int的范围内随机取出 //System.out.println(r.nextInt(4));//0--<4 在指定的区间内随机取出 //System.out.println(r.nextBoolean()); byte[] b = new byte[5];//随机取出 数组.length个随机数 r.nextBytes(b); System.out.println(Arrays.toString(b));System类
●System类概述:
System 类包含一些有用的类字段和方法,它不能被实例化
●成员方法:
public static void exit(int status)
public static long currentTimeMillis()
//public final static PrintStream out = null;
// System.out.print(1);
//1637483235781 是自1970.1.1 0:0:0 --- 程序运行时的那一刻的时间差(毫秒为单位)
//Long s = System.currentTimeMillis();
//System.out.println(s);
//System.exit(0); 退出虚拟机
//System.gc(); 垃圾回收 一般程序中不使用
//System.out.println("qqqqqqqqqqq");
//arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
int a[] = {1,2,3,4,5};
int b[] = new int[10];
System.arraycopy(a,1,b,0,4); //系统中提供的最底层的数组内容复制方法
System.out.println(Arrays.toString(b));
自定义工具类
public class StringUtil {
public static String subFileType(String fileName){
if (fileName!=null){
return fileName.substring(fileName.lastIndexOf(".")+1);
}
return null;
}
public static void main(String[] args) {
System.out.println(StringUtil.subFileType("hello.js"));
}
}



