字符串是由多个字符组成的一串数据(字符序列)的字符串常量,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和StringBuilderStringBuffer线程安全的,值可变的字符串(指的是底层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")); }}