app系统制作开发,网站seo三要素,aws创建wordpress,广州网站设计有哪些专业String String 类在 java.lang 包下#xff0c;所以使用的时候不需要导包String这个类比较特殊, 打印其对象名的时候, 不会出现内存地址#xff0c;而是该对象所记录的真实内容. 面向对象-继承, Object类 特点#xff1a;Java 程序中所有的双引号字符串#xff0c;都是 Str…String String 类在 java.lang 包下所以使用的时候不需要导包String这个类比较特殊, 打印其对象名的时候, 不会出现内存地址而是该对象所记录的真实内容. 面向对象-继承, Object类 特点Java 程序中所有的双引号字符串都是 String 类的对象字符串不可变它们的值在创建后不能被更改平常用的不是更改是替换String的值不可变但可被共享 常用String构造方法 public String() : 创建一个空白字符串对象不含有任何内容public String(char[] chs) : 根据字符数组的内容来创建字符串对象public String(String original) : 根据传入的字符串内容来创建字符串对象String s “abc”; 直接赋值的方式创建字符串对象内容就是abc 常用方法 public int length()返回此字符串的长度 代码演示 public static void main(String[] args) {// public String() : 创建一个空白字符串对象不含有任何内容String s1 new String();System.out.println(s1);// public String(char[] chs) : 根据字符数组的内容来创建字符串对象char[] chs {i,t,z,h,u,z,h,u};String s2 new String(chs);System.out.println(s2);// public String(String original) : 根据传入的字符串内容来创建字符串对象String s3 new String(1998);System.out.println(s3);}面试题 当字符串之间使用号拼接的时候系统底层会自动创建一个StringBuilder对象然后调用其append方法完成拼接拼接后再调用其toString方法转换为String类型然后和常量池的s1对比就发现了不一样所以答案是false public static void main(String[] args) {String s1 abc;String s2 ab;String s3 s2 c;System.out.println(s1 s3);}Java存在常量优化机制所以在编译的时候javac就会将a “b” “c拼接为abc”所以答案是ture String s1 abc;String s2 a b c;System.out.println(s1 s2);创建字符串对象的区别对比 通过构造方法创建 通过 new 创建的字符串对象每一次 new 都会申请一个内存空间虽然内容相同但是地址值不同 直接赋值方式创建 以“”方式给出的字符串只要字符序列相同(顺序和大小写)无论在程序代码中出现几次JVM 都只会建立一个 String对象并在常量池中维护 equals public boolean equals(String s) 比较两个字符串内容是否相同、区分大小写 比较基本数据类型比较的是具体的值 比较引用数据类型比较的是对象地址值 equals比较字符串内容, 区分大小写 equalsIgnoreCase : 比较字符串内容, 忽略大小写 代码演示
public class DemoEquals {public static void main(String[] args) {String s1 abc;String s2 ABC;String s3 abc;// equals : 比较字符串内容, 区分大小写System.out.println(s1.equals(s2));System.out.println(s1.equals(s3));// equalsIgnoreCase : 比较字符串内容, 忽略大小写System.out.println(s1.equalsIgnoreCase(s2));}
}遍历字符串 public int length()返回此字符串的长度 public char charAt(int index)返回指定索引处的char值字符串的索引也是从0开始的 public char[] toCharArray( )将当前字符串拆分为字符数组并返回 public class Test {public static void main(String[] args) {// 1. 键盘录入一个字符串用 Scanner 实现Scanner sc new Scanner(System.in);System.out.println(请输入:);String s sc.nextLine();// 2. 遍历字符串首先要能够获取到字符串中的每一个字符for(int i 0; i s.length(); i){// i : 字符串的每一个索引char c s.charAt(i);System.out.println(c);}}
}public static void main(String[] args) {// 1. 键盘录入一个字符串用 Scanner 实现Scanner sc new Scanner(System.in);System.out.println(请输入:);String s sc.nextLine();// 2. 将字符串拆分为字符数组char[] chars s.toCharArray();// 3. 遍历字符数组for (int i 0; i chars.length; i) {System.out.println(chars[i]);}}用户登录案例
public class Test1 {/*需求已知用户名和密码请用程序实现模拟用户登录。总共给三次机会登录之后给出相应的提示*/public static void main(String[] args) {// 1. 已知用户名和密码定义两个字符串表示即可String username admin;String password 123456;// 2. 键盘录入要登录的用户名和密码用 Scanner 实现Scanner sc new Scanner(System.in);// 4. 用循环实现多次机会这里的次数明确采用for循环实现for(int i 1; i 3; i){System.out.println(请输入用户名:);String scUsername sc.nextLine();System.out.println(请输入密码:);String scPassword sc.nextLine();// 3. 拿键盘录入的用户名、密码和已知的用户名、密码进行比较给出相应的提示。if(username.equals(scUsername) password.equals(scPassword)){System.out.println(登录成功);break;}else if (i 3) {System.out.println(您的登录次数已达到今日上限, 请明天再来);} else {System.out.println(登录失败,您还剩余 (3 - i) 次机会);}}}
}统计字符次数案例 public static void main(String[] args) {// 1. 键盘录入一个字符串用 Scanner 实现Scanner sc new Scanner(System.in);System.out.println(请输入:);String s sc.nextLine();// 2. 要统计三种类型的字符个数需定义三个统计变量初始值都为0int bigCount 0;int smallCount 0;int numCount 0;// 3. 遍历字符串得到每一个字符char[] chars s.toCharArray();for (int i 0; i chars.length; i) {char c chars[i];// 4. 判断该字符属于哪种类型然后对应类型的统计变量1if(c A c Z){bigCount;}else if(c a c z){smallCount;}else if(c 0 c 9){numCount;}}// 5. 输出三种类型的字符个数System.out.println(大写字母字符: bigCount);System.out.println(小写字母字符: smallCount);System.out.println(数字字母字符: numCount);}手机号屏蔽-字符串截取 public String substring(int beginIndex, int endIndex)从beginIndex开始截取到endIndex结束得到新字符串并返回包含头不包含尾所以要加一个索引才能正常逻辑截取 public String substring(int beginIndex) 从传入的索引处截取截取到末尾得到新的字符串 public static void main(String[] args) {// 1. 键盘录入一个字符串用 Scanner 实现Scanner sc new Scanner(System.in);System.out.println(请输入手机号:);String telString sc.nextLine();// 2. 截取字符串前三位String start telString.substring(0,3);// 3. 截取字符串后四位String end telString.substring(7);// 4. 将截取后的两个字符串中间加上****进行拼接输出结果System.out.println(start **** end);}
敏感词替换-字符串替换 String replace(CharSequence target, CharSequence replacement) 将当前字符串中的target内容使用replacement进行替换返回新的字符串 public static void main(String[] args) {// 1. 键盘录入一个字符串用 Scanner 实现Scanner sc new Scanner(System.in);System.out.println(请输入:);String s sc.nextLine();// 2. 替换敏感词String result s.replace(TMD,***);// 3. 输出结果System.out.println(result);}
切割字符串 String[] split(String regex) 根据传入的字符串作为规则进行切割将切割后的内容存入字符串数组中并将字符串数组返回 public static void main(String[] args) {// 例如itzhuzhu,23 通过逗号切割出来有效数据Scanner sc new Scanner(System.in);System.out.println(请输入学生信息:);String stuInfo sc.nextLine();// 1. 根据空格切割字符串String[] sArr stuInfo.split( );// 2. 从得到的字符串数组中取出元素内容通过Student类的有参构造方法封装为对象Student stu new Student(sArr[0],sArr[1]);// 3. 调用对象getXxx方法取出数据并打印。System.out.println(stu.getName() ... stu.getAge());}
判断前缀与后缀 startsWith方法用于检测字符串是否以指定的前缀开始。 endsWith方法用于判断字符串是否以指定后缀结尾 ListString list2 new ArrayListString();list2.add(韩信2);list2.add(李白2);list2.add(猴子2);list2.add(猴子2);list2.add(露娜2);list2.add(露娜2);list2.add(宫本2);list2.stream().filter(s - s.startsWith(韩)).forEach(System.out::println);list2.stream().filter(s - s.endsWith(娜)).forEach(System.out::println);StringBuilder StringBuilder 是一个可变的字符串类可以把它看成是一个容器这里的可变指的是 StringBuilder 对象中的内容是可变的 StringBuilder类和String类的区别 String类内容是不可变的执行速度慢StringBuilder类内容是可变的执行速度飞快 StringBuilder类的常用构造方法
方法名说明public StringBuilder()创建一个空白可变字符串对象不含有任何内容public StringBuilder(String str)根据字符串的内容来创建可变字符串对象public static void main(String[] args) {//public StringBuilder()创建一个空白可变字符串对象不含有任何内容StringBuilder sb new StringBuilder();System.out.println(sb: sb);System.out.println(sb.length(): sb.length());//public StringBuilder(String str)根据字符串的内容来创建可变字符串对象StringBuilder sb2 new StringBuilder(hello);System.out.println(sb2: sb2);System.out.println(sb2.length(): sb2.length());}StringBuilder类的常用成员方法
方法名说明public StringBuilder append(任意类型)添加数据并返回对象本身public StringBuilder reverse()返回相反的字符序列public int Length返回长度字符出现的个数public String toString()通过 toString() 就可以实现把 StringBuilder 转换为 Stringpublic static void main(String[] args) {StringBuilder sb new StringBuilder();StringBuilder sb1 sb.append(itzhuzhu);System.out.println(sb);StringBuilder sb2 sb.append(1998);System.out.println(sb);StringBuilder sb3 sb.append(199.8);System.out.println(sb);StringBuilder sb4 sb.append(true);System.out.println(sb);// 这里可以看到结果是一样的就可以证明是可变的调用sb1~sb4其实就是调用sb本身System.out.println(sb1 sb2);System.out.println(sb3 sb4);// 链式编程如果一个方法返回的是对象类型就可以一直向下调用方法简化步骤System.out.println(sb1.append(1).append(2).append(3));System.out.println(反转后 sb.reverse());System.out.println(字符个数为 sb.length());String s sb.toString();// 打印效果是一样的但是数据类型是不同的System.out.println(转为String类型后 s);}StringBuilder原理
String添加字符串会先在常量池找有没有这个字符没有的话就会在001开辟空间存这个字符串如果有拼接的话会直接转成StringBuilder然后再用toString转回String所以使用String速度会比较慢一点 StringBuilder添加字符会直接开辟一个StringBuilder地址然后会在一个StringBuilder中进行拼接字符就算进行一万次的拼接也就一个内存地址而用String会有多个所以StringBuilder速度会比较快
StringBuilder和String相互转换
StringBuilder转换为String public String toString()通过 toString() 就可以实现把 StringBuilder 转换为String String转换为StringBuilder public StringBuilder(String s)通过构造方法就可以实现把 String 转换为 StringBuilder public static void main(String[] args) {int[] arr {1, 2, 3};String s arrayToString(arr);System.out.println(s: s);}//定义一个方法用于把 int 数组中的数据按照指定格式拼接成一个字符串返回public static String arrayToString(int[] arr) {//在方法中用 StringBuilder 按照要求进行拼接并把结果转成 String 返回StringBuilder sb new StringBuilder([);for (int i 0; i arr.length; i) {// 是最后一个就拼接括号不是最后一个就拼接逗号if (i arr.length - 1) {sb.append(arr[i]).append(]);} else {sb.append(arr[i]).append(,);}}return sb.toString();}