String、StringBuffer、StringBuilder

来源:互联网 发布:mac 退出less 编辑:程序博客网 时间:2024/06/10 17:04

详细见API文档 代码:http://download.csdn.net/detail/shixigou2015/9627483

package com.demo;import java.sql.Array;import java.util.Collection;/* * 1、String类: * 介绍:JAVA字符串类,JAVA中使用""引用起来的内容都是String的实例; * 字符串一旦书写完成,这个字符串的字面值就会存放在字符串常量池(方法区)中,后期无法改变; * String str = "123",str = "345"————————>创建字符串"345",然后把str指向"345" * ——————————>String str = "123",String str1 = "123"没有new(堆区)的话,指向同一个内存地址 *  * new和直接赋值的区别:String str = "123"在字符串常量池中创建一个对象, * String str = new String("456")首先在字符串常量池创建一个对象(前提是字符串常量池没有"456"),然后在堆区创建一个对象,堆区对象指向常量池对象; *  * 常用方法: * 比较:equals(obj)、equalsIgnoreCase(str)obj的原因:复写了Object,第二个方法忽略大小写 * 长度:length() * 查找指定位置字符: * charAt(int)获取指定位置字符 * codePotinAt(int)返回指定位置Unicode编码 * indexOf(int index)获取指定字符在字符串第一次出现的位置直接传递char * indexOf(int index,int)指定位置开始字符第一次出现的位置 * indexOf(str)字符串在另一个字符串中第一次出现的位置 * indexOf(str,int)指定位置开始,字符串在另一个字符串中第一次出现的位置 * lastIndex.....最后一次出现的位置 * 替换: * replace(char,char) * replaceAll(regex)正则替换 * 拆分: * split(char) * split(regex,int)正则拆分 * 获取字符串: * substring获取子字串 * 判断: * contains字符串是否包含另一个字符串 * endWith字符串是否以另一个字符串结尾 * startWith字符串是否以另一个字符串开始 * isEmpty是否为空(字符串为null会报空指针异常) *  * 其它接口方法:compareTo来自 Comparable接口,用于比较对象大小 * ——————————>比较两个类大小一般返回 int >0 <0 =0表示大于小于等于 * * 2、Comparable接口: *介绍:对于任意一个对象都有可能需要比较大小,JAVA提供一个接口Comparable,用于给对象提供比较大小的功能 *实现此接口的对象可以使用Arrays.sort() Collections.sort()自动排序 *  * 3、StringBuffer: * 介绍:在对字符串处理是,如果使用"+"多次拼接字符串,这时会在字符串常量池生成多个字符串,产生垃圾, * StringBuffer可变字符串,用于解决此问题; * 方法: * length容器中字符串长度 capacity获取容量 * CRUD: * appendinsert拼接、插入 * delete * reversesetCharAT 反转、修改指定位置值 *  * 4、StringBuilder: * 介绍:线程不同步,功能和StringBuffer一样,速度快于StringBuffer * */class Person implements Comparable<Person> {private int age;private String name;public int getAge() {return age;}public Person(int age, String name) {this.age = age;this.name = name;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Person other = (Person) obj;if (age != other.age)return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}@Overridepublic int compareTo(Person o) {if (!(o instanceof Person)) {throw new ClassCastException("ClassCastException");}return this.age - o.getAge();}}public class MyString {public static void main(String[] args) {// TestString();System.out.println("——————————————————————————————————————————————");// 统计一个字符串在另一个字符串出现的次数System.out.println(getStringCount("abc" + "aabc" + "babc" + "cabc"+ "dabc" + "eabc", "abc"));System.out.println("——————————————————————————————————————————————");// 截取所有可能的子串 subAllString("ertyuioghj");System.out.println("——————————————————————————————————————————————");/* * 字符串数组排序 思路:数组排序,内外循环 */String str[] = { "aaab", "aabc", "bcaa", "ac", "v", "qwer" };String[] str1 = stringArraySort(str);for (String string : str1) {System.out.println(string);}System.out.println("——————————————————————————————————————————————");Person p1 = new Person(22, "zhangsan");Person p2 = new Person(23, "lisi");System.out.println(p1.compareTo(p2));TestStringBuffer();String str11 = "23regfhnbfdvsadSDFGJKOIUYFRDSXCCTV";String str2 = "WERGHJTYREERTHYCCTV";maxChildString(str11, str2);}private static void maxChildString(String str1, String str2) {String max = null;String min = null;if (str1.length() > str2.length()) {max = str1;min = str2;} else {max = str2;min = str1;}for (int i = 0; i < min.length(); i++) {for (int start = 0, end = min.length() - i; end <= min.length(); start++, end++) {String sub = min.substring(start, end);System.out.println(sub);// 截取if (max.contains(sub)) {System.out.println("——————————————" + sub);return;}}}}private static void TestStringBuffer() {StringBuffer buffer = new StringBuffer();buffer.append("abc").append("abc").append(false).insert(5, "ZZZ");System.out.println("增加:" + buffer + "  hashCode:  "+ buffer.hashCode());buffer.reverse().setCharAt(0, '我');System.out.println("修改:" + buffer + "  hashCode:  "+ +buffer.hashCode());System.out.println("删除:" + buffer.delete(1, 3) + "  hashCode:  "+ buffer.delete(1, 3).hashCode());}private static String[] stringArraySort(String[] str) {for (int i = 0; i < str.length - 1; i++) {// 数组靠前空间脚标for (int j = i + 1; j < str.length; j++) {// 数组外循环剩余的空间脚标if (str[i].compareTo(str[j]) > 0) {// 对提供脚标空间的数据进行判断String tmp = str[i];// 使用临时变量交换变量值str[i] = str[j];str[j] = tmp;}}}return str;}private static void subAllString(String str) {for (int i = 0; i < str.length(); i++) {for (int start = 0, end = str.length() - i; end <= str.length(); start++, end++) {System.out.println(str.substring(start, end));}System.out.println("---");}}private static int getStringCount(String str, String child) {// if (!str.contains(child)) {// return -1;// }// int count = 0;// int index = -1;// for (;;) {// index = str.indexOf(child, index + 1);// if (index == -1) {// break;// } else {// count++;// }// }int count = 0;while (str.contains(child)) {count++;int index = str.indexOf(child) + child.length();str = str.substring(index);}return count;}private static void TestString() {String str1 = "123";String str2 = "123";String str3 = new String("123");String str4 = "1" + "2" + "3";System.out.println("——————————————————————————————————————————————");System.out.println("方法区常量池没有创建新的对象:" + (str1 == str2));System.out.println("堆中创建新的对象(对象指向方法区,字符串常量池的123):" + (str3 == str2));System.out.println("没有创建新的对象:" + (str4 == str1));System.out.println("qbc".equals("QBc"));}}
运行结果:

——————————————————————————————————————————————6——————————————————————————————————————————————ertyuioghj---ertyuioghrtyuioghj---ertyuiogrtyuioghtyuioghj---ertyuiortyuiogtyuioghyuioghj---ertyuirtyuiotyuiogyuioghuioghj---ertyurtyuityuioyuioguioghioghj---ertyrtyutyuiyuiouiogioghoghj---ertrtytyuyuiuioiogoghghj---errttyyuuiioogghhj---ertyuioghj---——————————————————————————————————————————————aaabaabcacbcaaqwerv——————————————————————————————————————————————-1增加:abcabZZZcfalse  hashCode:  1956725890修改:我slafcZZZbacba  hashCode:  1956725890删除:我afcZZZbacba  hashCode:  195672589023regfhnbfdvsad23regfhnbfdvsa3regfhnbfdvsad23regfhnbfdvs3regfhnbfdvsaregfhnbfdvsad23regfhnbfdv3regfhnbfdvsregfhnbfdvsaegfhnbfdvsad23regfhnbfd3regfhnbfdvregfhnbfdvsegfhnbfdvsagfhnbfdvsad23regfhnbf3regfhnbfdregfhnbfdvegfhnbfdvsgfhnbfdvsafhnbfdvsad23regfhnb3regfhnbfregfhnbfdegfhnbfdvgfhnbfdvsfhnbfdvsahnbfdvsad23regfhn3regfhnbregfhnbfegfhnbfdgfhnbfdvfhnbfdvshnbfdvsanbfdvsad23regfh3regfhnregfhnbegfhnbfgfhnbfdfhnbfdvhnbfdvsnbfdvsabfdvsad23regf3regfhregfhnegfhnbgfhnbffhnbfdhnbfdvnbfdvsbfdvsafdvsad23reg3regfregfhegfhngfhnbfhnbfhnbfdnbfdvbfdvsfdvsadvsad23re3regregfegfhgfhnfhnbhnbfnbfdbfdvfdvsdvsavsad23r3rereg——————————————reg

基本类型和String转换

package com.demo;/* * 基本类型包装类: * 介绍:对基本类型复杂操作,需要把这些基本类型转换成对象类型,封装更多功能; * 8种基本类型:byteshortintlongfloatdoublecharboolean * IntegerCharacter * ——————————————>JDK5之后基本类型和包装类型转换升级,可以直接赋值 * 基本类型转换为对象:装箱;对象转换为基本类型:拆箱; *  * 基本类型转String: * String的valueOf * 加号直接转换 * 包装类型的toString * */public class Cast {public static void main(String[] args) {Integer i = new Integer(1);i = 9;System.out.println("2进制:" + i.toBinaryString(i));System.out.println("8进制:" + i.toOctalString(i));System.out.println("16进制:" + i.toHexString(i));System.out.println("四则运算:" + i * i.intValue());System.out.println("toString:" + i.toString() + "w");System.out.println("2到36进制转换:"+Integer.toString(4, 2)); }}
运行结果:


0 0
原创粉丝点击