大数据学习路线分享大数据之字符串,不可变字符串:----String.字符串本身不能发生改变,与指向字符串的引用无关。 String s1 = "1000phone"; 可变字符串:----StringBuilder/StringBuffer.字符串本身可以发生变化,与指向可变字符串的引用无关 StringBuffer sBuffer = new StringBuffer("1000phone"); 不可变字符串本身是一个常量,保存在常量区,是存储在了堆区中一块儿特殊的区域里。 字符串常量的特点:同一个字符串常量在常量区只允许存储一个。 String s = "1000phone";//不可变字符串 当执行s的时候,会到常量区找叫1000phone的字符串,如果有直接让s保存他的地址,如果没有,会在常量区开辟一块儿空间存1000phone. String s3 = new String("1000phone"); 执行s3时,由于进行了new,一定会现在堆中开辟一块儿空间,而1000phone是作为参数传给了对象.保存在了对象的一个String 使用equals进行String的比较 2.转换: 将字符数组转换成字符串 char[] arr = {'p','h','o','n','e'}; String string1 = new String(arr); //string1 = phone 将字符串转换成字符数组 char[] arr1 = string.toCharArray(); System.out.println(arr1); 将字节数组转成字符串 //String(byte[] bytes) //String(byte[] bytes, int offset, int length) //String(byte[] bytes, String charsetName)//使用指定的编码将字节数组转换成字符成 byte[] bytes = {97,98,99,100}; String string3 = new String(bytes); System.out.println(string3); //abcd 将字符串转成字节数组 //byte[] getBytes() byte[] bytes1 = string3.getBytes(); 将基本数据类型转换成字符串 //String.valueOf() String string4 = String.valueOf(true); System.out.println(string4);//true 子串: //包含起始位置,不包含结束位置,到结束位置的前一位 String substring(int beginIndex, int endIndex); 大小写转换 String toLowerCase(); // 转成小写 String toUpperCase(); // 转成大写 按字典顺序比较两个字符串 字典顺序:按照ASCII表比较当前的两个字符,ASCII码大的认为是大的字符 规则:从左边第一个字符开始比较 如果当前的字符不相同,直接认为ASCII大的字符串是大字符串,后面的字符停止比较 当前字符比较的具体规则:使用前面的字符-后面的字符,返回差值.如果是负数,说明前面的字符串小于后面的.反之前面的大. 如果当前的字符相同,再去比较第二个字符,依次往后推,如果比到最后都相同,则认为两个字符串相等,差值返回0. "1000PHone".compareTo("1000PHone");//0 "1000AHone".compareTo("1000BHone");//-1 "100000".compareTo("100");//-3 可变字符串: 字符串缓冲区.StringBuffer/StringBuilder 区别: StringBuffer:出现在jdk1.0,是线程安全的,考虑了线程安全问题 StringBuilder:出现在jdk1.5,是线程不安全的,没有考虑线程安全问题 注意:在不考虑线程安全问题时,尽量使用StringBuilder,因为速度快,效率高 使用: StringBuffer sBuffer = new StringBuffer(); //1.存储: //StringBuffer append(boolean b) 从最后插入 sBuffer.append("abcd"); //abcd //StringBuffer insert(int offset, boolean b) 从指定位置插入 sBuffer.insert(4, 123); System.out.println(sBuffer);//abcd123 //2.删除: //StringBuffer delete(int start, int end) 删除一部分字符串 //StringBuffer deleteCharAt(int index) 删除一个字符 System.out.println(sBuffer.deleteCharAt(4));//abcd23 System.out.println(sBuffer.delete(2,4)); //ab23 //3.修改: //StringBuffer replace(int start, int end, String str) 替换指定的子字符串 //void setCharAt(int index, char ch) 修改一个字符 sBuffer.replace(1, 3, "ab") ; //aab3 //4.获取: //char charAt(int index) System.out.println(sBuffer.charAt(0)); //a //返回指定子字符串的下标 从左到右 //int indexOf(String str) System.out.println(sBuffer.indexOf("ab"));//1 //返回指定子字符串在此字符串中第一次出现处的索引,从指定的索引开始。 System.out.println(sBuffer.indexOf("ab",0)); //1 System.out.println(sBuffer.indexOf("ab",2)); //-1 //int lastIndexOf(String str) //返回指定子字符串(从右边开始计数)在此字符串第一次出现时的索引 System.out.println(sBuffer.indexOf("ba")); //-1 System.out.println(sBuffer.indexOf("ab")); //1 //int lastIndexOf(String str, int fromIndex) /返回指定字符在此字符串中最后一次出现处的索引,从指定的索引处开始进行反向搜索。 System.out.println(sBuffer.indexOf("ab",1)); //1 //5.反转: //StringBuffer reverse() System.out.println(sBuffer.reverse()); //3baa |
|