Java--String类
1.String
- Java程序中的所有字符串文本(例如:"abc") 都是此类的实例
- 字符串字面值是常量,创建之后不可改变。
- 字符串字面值存储在字符串池中,可以共享。
- 常用创建方式:
- String str1 = "hello";//这种创建方式 产生一个对象 在字符串池中开辟一块空间存储
- String str2 = new String("hello");//这种创建方式会创建两个对象,字符串池 和 堆中 会同时开辟空间存储
package com.monv.str; public class TestStr { public static void main(String[] args) { String str1 = "hello";//"hello"常量存储在字符串池中 str1 = "world";//"world"赋值给str1变量,在赋值的时候,并没有修改数据,而是重新开辟空间,创建"world" String str2 = "world"; //字符串的另一种创建形式:new String();这种方式创建字符串会创建两个对象 一个在堆空间 一个在字符串池中 String str3 = new String("java"); String str4 = new String("java"); System.out.println(str3 == str4);//false System.out.println(str3.equals(str4));//true String类对equals有重写 比较的是值 } }
二、常用方法
- public int lenght():返回字符串长度
- public char charAt(int index):根据下标获取字符
- public boolean contains(String str):判断当前字符串中是否包含str
- public char[] toCharArray():将字符串转换成数组
- public int indexOf(String str):查找str首次出现的下标,存在,则返回该下标;不存在,则返回-1
- public int lastIndexOf(String str):查找字符串在当前字符串中最后一次出现的下标索引
- public String trim():去掉字符串前后的空格
- public String toUpperCase():将小写转成大写
- public boolean endWith(String str):判断字符串是否以str结尾
- public String replace(char old,char new):将旧字符串替换为新字符串
- public String[] split(String str):根据str做拆分
package com.monv.str; import java.util.Arrays; public class TestStr1 { public static void main(String[] args) { //字符串方法的使用 System.out.println("-----字符串的使用方法1-------"); //1.length();返回字符串的长度 //2.charAt(int index);返回某个位置的字符 //3.contains(String str);判断是否包含某个字符串 String str1 = "java是最好的编程语言java,java学习中 "; System.out.println(str1.length());//25 System.out.println(str1.charAt(10));//语 System.out.println(str1.contains("java"));//true System.out.println("-----字符串的使用方法2-------"); //4.toCharArray();返回字符串对应的数组 //5.indexOf();返回字符串首次出现的位置 //6.lastIndexOf();返回字符串最后一次出现的位置 System.out.println(Arrays.toString(str1.toCharArray()));//[j, a, v, a, 是, 最, 好, 的, 编, 程, 语, 言, j, a, v, a, ,, j, a, v, a, 学, 习, 中, ] System.out.println(str1.indexOf("java"));//0 System.out.println(str1.indexOf("java", 5));//12;第一个参数:查找的字符串;第二个参数:角标,表示从这个位置开始查找 System.out.println(str1.lastIndexOf("java"));//17 System.out.println("-----字符串的使用方法3-------"); //7.trim();去掉前后的空格 //8.toUppderCase();把小写转换为大写 toLowerCase() 把大写转换为小写 //9.endWith(String str);判断是否以str结尾 ,startWith(String str);判断是否以str开头 String str2 = " Hello World "; System.out.println(str2.trim());//Hello World System.out.println(str2.toUpperCase());// HELLO WORLD System.out.println(str2.toLowerCase());// hello world String str3="hello.java"; System.out.println(str3.endsWith("java"));//true System.out.println(str3.startsWith("hello"));//true System.out.println("-----字符串的使用方法4-------"); //10.replace(char old,char new);用新的字符串替换旧的字符串 //11.split(String str);对字符串进行拆分 System.out.println(str1.replace("java", "php"));//php是最好的编程语言php,php学习中 String str4 = "java is the best programing language,java learn"; // String[] arr = str4.split(" ");//按空格进行拆分 // String[] arr = str4.split("[ ,]");//[ ,]表示按空格或,进行拆分 String[] arr = str4.split("[ ,;]+");//[ ,]+表示空格或,可以连续出现多个 然后再进行拆分 System.out.println(arr.length);//8 for(String string : arr){ System.out.println(string); } //补充两个方法equals()、compareTo();比较大小比较的是字符在编码表的位置 System.out.println("-----补充的两个方法-------"); String str5= "hello"; String str6= "Hello"; System.out.println(str5.equals(str6));//false System.out.println(str5.equalsIgnoreCase(str6));//true; 忽略大小写的比较 String str7="abc";//a:97 String str8="xyzere";//x:120 System.out.println(str7.compareTo(str8));//-23 //下面两个字符串的比较的时候 比较的是长度 因为前边几个字符完全相同"abc",str9"abc"之后没有字符了,str10"abc"之后还有字符 String str9="abc"; String str10="abcxyz"; System.out.println(str9.compareTo(str10));//-3;这个比较的长度 str9的长度减str10的长度 } }
三、案例
已知String str="this is a text";
1.将str中的单词单独获取出来
2.将str中的text替换为practice
3.在text前面插入一个easy
4.将每个单词的首字母改为大写
package com.monv.str; public class TestStr2 { public static void main(String[] args) { String str ="this is a text"; //1.将str中的单词单独获取出来 System.out.println("----1.将str中的单词单独获取出来----"); String[] arr = str.split(" "); for(String string : arr){ System.out.println(string); } //2.将str中的text 替换为practice System.out.println("----2.将str中的text 替换为practice----"); String str2 = str.replace("text", "practice"); System.out.println(str2); //3.在text前面插入一个easy System.out.println("----3.在text前面插入一个easy----"); String str3 = str.replace("text","easy text"); System.out.println(str3); //4.将每个单词的首字母改为大写 System.out.println("----4.将每个单词的首字母改为大写----"); //思路:循环每一个单词取第一位然后转换为大写,之后再拼接 String strAll = ""; for(int i = 0;i<arr.length;i++){ char firstchar = arr[i].charAt(0);//去取单词的首字母 char toUpperChar = Character.toUpperCase(firstchar);//转换为大写 String newsString = toUpperChar + arr[i].substring(1);//重新拼接 if(i == arr.length-1 ){ strAll += newsString; System.out.println(strAll); //This Is A Text }else { strAll = strAll + newsString+" "; } } } }
四、可变字符串
- 概念:可在内存中创建可变的缓冲空间,存储频繁改变的字符串
- 常用方法:public StringBuilder append(String str)
- StringBuilder :可变长字符串,JDK5.0提供,运行效率快、线程不安全
- StringBuffer :可变长字符串,JDK1.0提供,运行效率慢、线程安全
package com.monv.str; /** * StringBuffer和StringBuilder的使用 * 和String区别(1)效率比String高 (2)比String节省内存 * @author Administrator * */ public class TestStr3 { public static void main(String[] args) { // StringBuffer 和 StringBuilder 功能一样 // StringBuffer strBuffer = new StringBuffer(); StringBuilder strBuffer = new StringBuilder(); //1.append();追加 strBuffer.append("java开发语言"); System.out.println(strBuffer.toString());//这里要转换为String输出 java开发语言 strBuffer.append("java语言学习中"); System.out.println(strBuffer.toString());//java开发语言java语言学习中 //2.insert();添加 strBuffer.insert(0,"写在最前边");//第一个参数:在哪个位置插入 System.out.println(strBuffer.toString());//写在最前边java开发语言java语言学习中 //3.replace();替换 strBuffer.replace(0, 5, "Hello"); System.out.println(strBuffer.toString());//Hellojava开发语言java语言学习中 //4.delete();删除 strBuffer.delete(0, 5); System.out.println(strBuffer.toString());//java开发语言java语言学习中 //5.清空 strBuffer.delete(0, strBuffer.length()); System.out.println(strBuffer.length());//0 } }
- 验证StringBuilder的效率高于String
package com.monv.str; /* * 验证StringBuilder的效率高于String */ public class TestStr4 { public static void main(String[] args) { //开始时间 long start = System.currentTimeMillis(); String str = ""; for(int i = 0 ;i<9999;i++){ str += i; } //结束时间 long end = System.currentTimeMillis(); System.out.println("用时:"+(end-start));//用时:804 //开始时间 long start1 = System.currentTimeMillis(); StringBuilder strbu = new StringBuilder(); for(int i = 0 ;i<9999;i++){ strbu.append(i); } //结束时间 long end1 = System.currentTimeMillis(); System.out.println("用时:"+(end1-start1));//用时:20 } }
输出是最好的输入。把学习的内容输出出来,加深记忆;