String是Java.lang.String(字符串类,包含了字符串的值和实现字符串相关 *** 作的一些方法),使用时不需要导包.
* String是字符串类,是引用类型,底层是char数组,所以String 的特性和数组一致
*
* 1.字符串一旦构建,该字符串不能更改
*
* 2.为了提高字符串的访问效率,java虚拟机使用了一种缓存技术,可以对字符串 *** 作更加简单方便,更加高效(字符串常量池)
*
* 3.字符串会被保存在静态区的常量池中,可以增强复用性
* 当我们用到一个重复的字符串的时候,会去常量池中进行检索,如果有该字符串,则直接指向,如果没有就创建
*
public class String_01 { public static void main(String[] args) { // 创建一个字符串对象,直接指向常量池 String string = "ab"; // string 是main方法中的局部变量, = 赋值只是更改了这个变量的值,并没有更改ab这个字符串对象 string = "cd"; // 只会创建一个对象 , 就是abc 保存在常量池中 String s1 = "abc"; String s2 = "abc"; // true System.out.println(s1 == s2); System.out.println(s1.equals(s2)); // 创建了3个对象,堆内存两个,常量池1个 String s3 = new String("abc"); String s4 = new String("abc"); System.out.println(s3 == s4); System.out.println(s3.equals(s4)); } }
构造方法:创建String对象的几种方法
* 1.直接创建
* 2.普通构造
* 3.字节数组
* 4.字符数组
public class String_02 { public static void main(String[]args){ //直接创建 String s1="xxx"; //普通构造 String s2=new String("xxx"); //字节数组 byte[]bytes={97,98,99,100}; String s3=new String(bytes); //abcd System.out.println(s3); //字节数组截取一部分 //下标0开始,第二个参数 起始下标(包含),第三个参数 是个数 String s4=new String(bytes,1,3); //bc System.out.println(s4); //字符数组 char[]chars={'q','w','e','r','d','f'}; String s5=new String(chars); System.out.println(s5); //字符数组 截取一部分 String s6=new String(chars,2,3); System.out.println(s6); } }
常用方法
* 1.什么方法,是成员还是静态
* 2.方法名 参数,返回值是什么
* 3.方法功能
public class String_03 { public static void main(String[]args){ //1.char charAt(int index):获取字符串中指定下标的字符 String s1="qwer"; char c=s1.charAt(2); System.out.println(c); //2.boolean startsWith(String prefix):判断该字符串是否以指定字符串开头 //endsWith:是否以指定字符串结尾 System.out.println("Hello.java".endsWith(".java")); //false注意空格 System.out.println("Hello.java ".endsWith(".java")); System.out.println("Hello.java".endsWith("a")); //3.boolean equals(Object obj):判断字符串是否相等 //boolean equalsgnoreCase(String str):不区分大小写判断相等 System.out.println("aAfXCs".equals("aaFxcs")); System.out.println("aAfXCs".equalsIgnoreCase("aaFxcs")); //4.byte[]getBytes():把字符串转换成字节数组 byte[]bytes="abcd".getBytes(); for(byte b:bytes){ System.out.println(b); } //5.char[]toCharArray():把字符串转换成字符数组 char[] chars="abcd".toCharArray(); for(char d:chars){ System.out.println(d); } //6 int indexOf(String str):获取指定字符串在该字符串中第一次出现的索引,找不到就返回-1 //int lastIndexOf(String str):同上,最后一次出现的索引, int index = "abfacdefabc".indexOf("fa"); System.out.println(index); index = "abfacdefabc".lastIndexOf("fa"); System.out.println(index); //7.int length():返回字符串长度 System.out.println("xzjhcaskd".length()); //8.String[]split(String regex):分割字符串,支持正则表达式 String[]strs="2008,08,09".split(","); for(String string:strs){ System.out.println(string); } System.out.println("============="); //9.String replaceAll(String regex,String replacement):替换字符串中的内容为指定文字,支持正则表达式 //replace:替换字符串中的指定文字,不支持正则表达式 String string="ahsdhqwajsbasda"; //替换为空字符串,就等于把a删掉 String newString=string.replace("a",""); System.out.println(newString); //10.String substring(int beginIndex,int endIndex):截取字符串,包含开始 //substring(int beginIndex):从指定下标开始(包含),到末尾 String s2="abcde"; //cdef System.out.println(s2.substring(2)); //cd System.out.println(s2.substring(2,4)); //11. String toUpperCase():转换为大写 //12.String toLowerCase():转换为小写 //13.String trim():去除两边空格 System.out.println(" a b "); System.out.println(" a b ".trim()); //多个英文名字,以逗号隔开 String name="job,rols,xiaoming,xiaohong"; //需求:获取每一个姓名,并把该姓名以首字母大写进行储存 //1.以逗号分割,得到封装每个名字的数组 String[]names=name.split(","); //2.遍历数组,获取每个姓名,截取字符串,转换为大写,再拼接起来 for(int i=0;i使用String不推荐进行频繁的字符串拼接 *** 作
*
* 因为字符串一旦创建不可改变,只要拼接,就会创建新的字符串对象
*
* 浪费空间,效率还低,就等于是使用定长数组频繁做添加 *** 作一样public class String_04 { public static void main(String[]args){ //字符数组 String[] strs={"a","b","c"}; String str=""; //遍历 for(int i=0;i public class String_05 { public static void main(String[] args) { String s1="ab"; String a="a"; String b="b"; String s2=a+b; //false System.out.println(s1==s2); String s3="a"+"b"; //true System.out.println(s3==s1); String s4=new String("ab"); //false System.out.println(s1==s4); } }欢迎分享,转载请注明来源:内存溢出
评论列表(0条)