做网站租服务器吗,wordpress购买按钮,如何用服务器搭建自己的网站,wordpress插件用户权限目录 1、常用API2、String类2.1 String类的特点2.2 String类的常见构造方法2.3 String类的常见面试题#xff1a;2.3.1 面试题一#xff1a;2.3.2 面试题二#xff1a;2.3.3 面试题三#xff1a;2.3.4 面试题四#xff1a; 2.4 String类字符串用于比较的方法2.5 String类字… 目录 1、常用API2、String类2.1 String类的特点2.2 String类的常见构造方法2.3 String类的常见面试题2.3.1 面试题一2.3.2 面试题二2.3.3 面试题三2.3.4 面试题四 2.4 String类字符串用于比较的方法2.5 String类字符串的遍历2.6 String类字符串的截取方法2.7 String类字符串的替换方法2.8 String类字符串的切割方法2.9 String类字符串方法的总结 3、StringBuilder类3.1 StringBuilder介绍3.2 StringBuilder的构造方法3.3 StringBuilder的常用方法3.4 StringBuffer与StringBuilder的区别 1、常用API Scanner类录入字符串注意事项 API帮助文档的使用流程
2、String类
2.1 String类的特点
Java程序中所有双引号字符串都是String的实例即对象。如下是两种创建字符串对象的方法
String s ;
String s1 new String();字符串一旦被创建则不可被更改即字符串的内容不可更改如果要修改则只能使用新的对象做替换。如下
String s abc;
s def;String字符串虽然不可改变但可以被共享。为了解释清除什么是共享因此这里要涉及一个概念即字符串常量池当我们使用双引号创建字符串对象时会先去字符串常量池中检查是否存在改数据 存在创建 不存在复用 看如下代码就是共享的例子
String s1 abc;
String s2 abc;
System.out.println(s1 s2);输出
true上述代码的内存图解释 注比较地址而equals()比较内容。 总结
2.2 String类的常见构造方法 注意事项 1、打印对象名时会输出对象在堆内存开辟的内存地址但是打印字符串对象时输出的是内容。 2、这三个构造方法创建对象都没有直接使用双引号来的方便。 2.3 String类的常见面试题
2.3.1 面试题一
System.out.pringlns1 s2输出true还是false为什么
答两个字符串都是用双引号创建对象时其实都是引用了堆内存中字符串常量的内存地址因此使用号作比较时两个指向同一个地址自然输出true。下面是内存图解释
2.3.2 面试题二
直接使用双引号创建字符串与使用构造方法创建字符串有什么区别
答使用双引号时会在堆内存的字符串常量池中开辟一个空间而使用构造方法new一个对象时会在堆内存的普通区局开辟一个空间因此当这两种创建内容相同但是用做比较时会输出false。看下面的内存图解释
2.3.3 面试题三
字符串做拼接时的原理。
答使用做拼接时首先会在堆内存开辟StringBuilder对象的内存地址然后再调用此类的toString方法转换成字符串转换后的字符串也会在堆内存中开辟一个空间最后再将转换后字符串的地址给栈内存中引用的变量因此拼接后的字符串和使用双引号创建的字符串内容虽然相同但是指向的地址是不同的使用自然会返回false。下面是内存图解释
2.3.4 面试题四
字符串常量拼接原理在编译时就会做优化处理所以编译成字节码文件后就是拼接到一起的样子例如下图 输出为true原因是s2编译成字节码文件后为abc和s1是一样的。 2.4 String类字符串用于比较的方法 练习 package com.itheima.string;import com.itheima.string.vo.User;import java.util.Scanner;public class Login {public static void main(String[] args) {login();}public static void login(){// 1、从数据库查找正确的用户名和密码User user new User(马四, 1qaz);// 2、和用户输入做比较Scanner sc new Scanner(System.in);for (int i 0; i 3; i) {System.out.println(请输入用户名);String username sc.next();System.out.println(请输入密码);String password sc.next();if (username.equals(user.getName()) password.equals(user.getPassword())){System.out.println(登录成功);break;}System.out.println(你输入不正确还剩余 (2- i) 次机会);}}
}注如果字符串的比较要忽略大小写则使用equalsIgnoreCase方法即可。 2.5 String类字符串的遍历 package com.itheima.string;public class StringMethodDemo {public static void main(String[] args) {
// print1();print2();}/*字符串的第一种遍历方式*/private static void print1() {String s itheima;char[] charArray s.toCharArray();for (int i 0; i charArray.length; i) {System.out.println(charArray[i]);}}/*字符串的第二种遍历方式*/private static void print2() {String s itheima;for (int i 0; i s.length(); i) {System.out.println(s.charAt(i));}}
}注第一种方法遍历效率高 练习1 package com.itheima.string;
import java.util.Scanner;public class StringTestDemo {public static void main(String[] args) {countCharNumber();}public static void countCharNumber(){int numCount 0;//数字数量int lowerCount 0;//小写数量int upperCount 0;//大写数量Scanner sc new Scanner(System.in);System.out.println(请录入一个字符串);String s sc.next();char[] chars s.toCharArray();for (int i 0; i chars.length; i) {if (chars[i] 0 chars[i] 9){numCount;}else if (chars[i] a chars[i] z){lowerCount;} else if (chars[i] A chars[i] Z) {upperCount;}}System.out.println(数字数量 numCount);System.out.println(小写数量 lowerCount);System.out.println(大写数量 upperCount);}
}2.6 String类字符串的截取方法 package com.itheima.string;public class StringTestDemo2 {public static void main(String[] args) {
// substring1();stustring2();}private static void substring1() {String s itheima;String substring s.substring(3);//包含开始索引输出ithSystem.out.println(substring);}private static void stustring2() {String s itheima;String substring s.substring(1, 5);//包含开始索引不包含结束索引输出theiSystem.out.println(substring);}
}练习 package com.itheima.string;import java.util.Scanner;public class StringTestDemo3 {public static void main(String[] args) {Scanner scanner new Scanner(System.in);System.out.println(请输入一个手机号);String phoneNumber scanner.next();String mockPhoneNumber phoneNumber.substring(0, 4) **** phoneNumber.substring(8, 11);System.out.println(最终效果为 mockPhoneNumber);}
}2.7 String类字符串的替换方法 package com.itheima.string;public class StringTestDemo {public static void main(String[] args) {String s itheima;String replace s.replace(heima, baima);//旧值新值System.out.println(replace);}
}练习 package com.itheima.string;
import java.util.Scanner;public class StringTestDemo4 {public static void main(String[] args) {Scanner sc new Scanner(System.in);System.out.println(请输入一个字符串);String s sc.next();String replace s.toUpperCase().replace(TMD, ***);//全部转大写System.out.println(replace);}
}2.8 String类字符串的切割方法 package com.itheima.string;public class StringTestDemo4 {public static void main(String[] args) {String s abc,def,ghj;String[] split s.split(,);for (int i 0; i split.length; i) {System.out.println(split[i]);}String ss abc.def.ghj;String[] split1 ss.split(\\.);//因为split参数是正则表达式匹配而.代表任意数所以需要用转义符\做转义即可for (int i 0; i split1.length; i) {System.out.println(split1[i]);}}
}2.9 String类字符串方法的总结 3、StringBuilder类
3.1 StringBuilder介绍 作用 看下提高的效率
package com.itheima.stringBuilder;public class StringBuilderDemo1 {public static void main(String[] args) {long start System.currentTimeMillis();String s ;for (int i 0; i 11111; i) {s i;}System.out.println(s);long end System.currentTimeMillis();long start1 System.currentTimeMillis();StringBuilder sb new StringBuilder();for (int i 0; i 11111; i) {sb.append(i);}System.out.println(sb);long end1 System.currentTimeMillis();System.out.println(end - start);//502System.out.println(end1 - start1);//3}
}可以发现使用了StringBuilder类运行时间减少了几个数量级。 3.2 StringBuilder的构造方法 3.3 StringBuilder的常用方法 案例1 package com.itheima.stringBuilder;public class StringBuilderDemo2 {public static void main(String[] args) {StringBuilder sb new StringBuilder(156651);String s1 sb.toString();String s2 sb.reverse().toString();if (s1.equals(s2)){System.out.println(是回文);}else {System.out.println(不是回文);}}
}String和StringBuilder相互的转换 案例2 package com.itheima.stringBuilder;public class StringBuilderDemo3 {public static void main(String[] args) {int[] arr {1, 2, 3};String string getString(arr);System.out.println(string);}public static String getString(int[] arr){StringBuilder sb new StringBuilder([);for (int i 0; i arr.length; i) {sb.append(arr[i]);if (i ! arr.length - 1){sb.append(,);}}sb.append(]);return sb.toString();}
}3.4 StringBuffer与StringBuilder的区别
StringBuffer 与 StringBuilder使用上没有区别因此学会了使用StringBuilder则StringBuffer就会使用。
但是不同点在于当多线程时StringBuffer是安全的(效率低)而StringBuilder是不安全的(效率高)。为何这样在后续多线程里介绍。