黑马程序员------String类

------ <a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

1.String

1.1 string类

/*

 *java.lang.String类:String 类代表字符串。Java 程序中的所有字符串字面值(如"abc" )都作为此类的实例实现。

 *

 * 1.此类被定义为final,不能被继承;

 * 2.在Java中,"字符串"是用String类的对象表示的;

 * 3.字符串是常量;它们的值在创建之后不能更改。

 *4.String内部,就是使用"字符数组"处理;

 *5.String对象实例化的方式比较特殊:

 *             1).String s = "abc";//OK的

 *             2).String s1 = newString("abc");//OK的

 *6.String类的构造方法:

 *             public String():构造一个零长度字符串;会产生对象空间,不是空指针;

                   publicString(byte[] bytes):将一个byte[]数组(每个byte值作为一个ASCII码值,查找对应的字符)转换为一个String;

                   publicString(byte[] bytes,int offset,int length):将一个byte[]数组的一部分转换为String。

                   publicString(char[] value):将一个char[]数组转换为一个String;

                   publicString(char[] value,int offset,int count):将一个char[]数组的一部分转换为String

                   publicString(String original):用一个String构造一个String

   7.成员方法:

               public int length():获取内部字符的长度;

 */

public class Demo {
	public static void main(String[] args) {
		//1.public String():构造一个零长度字符串;会产生对象空间,不是空指针;
		String s1 = new String();//零长度字符串
		System.out.println("是否是空指针:" + (s1 == null));//false
		System.out.println("内部字符的长度:" + (s1.length()));//0
		
		String s2 = "";//零长度字符串
		System.out.println("s1 == s2 : " + (s1 == s2));//false
		System.out.println("s1.equals(s2) : " + s1.equals(s2));//true
		
		//2.public String(byte[] bytes):将一个byte[]数组,转换为一个String;
		byte[] byteArray = {97,98,99,100};
		String s3 = new String(byteArray);
		System.out.println("s3 = " + s3);
		
		//3.public String(byte[] bytes,int offset,int length)
		//取cd
		String s4 = new String(byteArray,2,2);
		System.out.println("s4 = " + s4);
		//取bc
		s4 = new String(byteArray,1,2);
		System.out.println("s4 = " + s4);
		
		//4.public String(char[] value)
		char[] charArray = {'a','b','你',':','好'};
		String s5 = new String(charArray);
		System.out.println("s5 = " + s5);
		
		//5.public String(char[] value,int offset,int count)
		//取ab
		String s6 = new String(charArray,0,2);
		System.out.println("s6 = " + s6);
		
		//6.public String(String original)
		String s7 = new String("我爱Java");
		String s8 = new String(s7);
		System.out.println("s7 = " + s7);
		System.out.println("s8 = " + s8);
		
		
	}
}

1.2  String类的特点

/*
 * String类的特点:
 * 字符串是常量;它们的值在创建之后不能更改。
 * 
 * String s1 = "你好"
 * s1 = "java";//改变的引用,原值"你好"的空间被丢弃,而且原空间的值没有被修改;
 */
public class Demo {
	public static void main(String[] args) {
		int n = 10;
		n = 20;
		System.out.println("n = " + 20);
		
		String s1 = "你好";
		s1 = "java";
		System.out.println("s1 = " + s1);
	}
}

1.3.  String的例子==和equals

==和equals的区别

==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。

    equals方法是用于比较两个独立对象的内容是否相同

 

public class Demo {
	public static void main(String[] args) {
		String s1 = "你好";//s1 = 0x2233
		String s2 = "你好";//s2 = 0x2233
		System.out.println("s1 == s2 : " + (s1 == s2));//true
		System.out.println("s1.equals(s2) : " + (s1.equals(s2)));//true
		
		String s3 = "你好";
		String s4 = new String("你好");
		System.out.println("s3 == s4 : " + (s3 == s4));//false
		System.out.println("s3.equals(s4) : " + (s3.equals(s4)));//true
		
		String s5 = new String ("你好");
		String s6 = new String("你好");
		System.out.println("s5 == s6 : " + (s5 == s6));//false
		System.out.println("s5.equals(s6) : " + (s5.equals(s6)));//true
		
		//---------------------------------------------------------------------//
		String s7 = "你好";
		String s8 = "java";
		String s9 = "你好java";
		String s10 = s7 + s8;
		String s11 = s7 + "java";
		String s12 = "你好" + s8;
		String s13 = "你好" + "java";//s13 = "你好java";
		
		System.out.println("s9 == s10 : " + (s9 == s10));//false
		System.out.println("s9 == s11 : " + (s9 == s11));//false
		System.out.println("s9 == s12 : " + (s9 == s12));//false
		System.out.println("s9 == s13 : " + (s9 == s13));//true
	}
}

1.4 String的判断功能

/*

 *String的判断功能:

 *boolean equals(Object obj):将此字符串与指定的对象比较。当且仅当该参数不为 null,并且是与此对象表示相同字符序列的 String对象时,结果才为 true。

 *boolean equalsIgnoreCase(String str):不区分大小写的判断

 *boolean contains(String str):当且仅当此字符串包含指定的参数字符串时,返回 true。区分大小写

 *boolean startsWith(String str):测试此字符串是否以指定的前缀开始。 区分大小写

 *boolean endsWith(String str):测试此字符串是否以指定的后缀结束。区分大小写

 *boolean isEmpty():判断是否0长度字符串;

 */

public class Demo {
	public static void main(String[] args) {
		String s1 = "java";
		String s2 = "java";
		String s3 = "Java";
		//1.boolean equals(Object obj):区分大小写
		System.out.println("s1.equals(s2) : " + (s1.equals(s2)));
		System.out.println("s1.equals(s3) : " + (s1.equals(s3)));
		//2.boolean equalsIgnoreCase(String str):不区分大小写的判断
		System.out.println("s1.equalsIgnoreCase(s2) : " + s1.equalsIgnoreCase(s2));
		System.out.println("s1.equalsIgnoreCase(s3) : " + s1.equalsIgnoreCase(s3));
		
		//3.boolean contains(String str):区分大小写
		String s4 = "你好java";
		System.out.println("s4中是否包含\"你好\":" + s4.contains("你好"));
		System.out.println("s4中是否包含\"a\":" + s4.contains("a"));
		System.out.println("s4中是否包含\"z\":" + s4.contains("z"));
		System.out.println("s4中是否包含\",\":" + s4.contains(","));
		System.out.println("s4中是否包含\"av\":" + s4.contains("av"));
		System.out.println("s4中是否包含\"AV\":" + s4.contains("AV"));
		
		//4. boolean startsWith(String str)
		String s5 = "你好java";
		System.out.println(s5 + "中是否以\"你\"开头:" + s5.startsWith("你"));
		System.out.println(s5 + "中是否以\"你好\"开头:" + s5.startsWith("你好"));
		System.out.println(s5 + "中是否以\"你好java\"开头:" + s5.startsWith("你好java"));
		System.out.println(s5 + "中是否以\"java\"开头:" + s5.startsWith("java"));
		System.out.println(s5 + "中是否以\"你好ja\"开头:" + s5.startsWith("你好ja"));
		System.out.println(s5 + "中是否以\"你好JA\"开头:" + s5.startsWith("你好JA"));
		
		//5.boolean endsWith(String str)
		System.out.println(s5 + "中是否以\"java\"结尾:" + s5.endsWith("java"));
		System.out.println(s5 + "中是否以\"Java\"结尾:" + s5.endsWith("Java"));
		
		//6.boolean isEmpty()
		String s6 = "";//0x2233
		String s7 = new String("");//0x5566
		String s8 = null;//null
		System.out.println("s6.isEmpty() : " + s6.isEmpty());//true
		System.out.println("s7.isEmpty() : " + s7.isEmpty());//true
		System.out.println("s8.isEmpty() : " + s8.isEmpty());//运行时异常:NullPointerException
	}
}

1.5  String类的获取功能

/*

 *String类的获取功能:

 *   int length():区分数组的length属性

         charcharAt(int index):获取index位置上的字符

         intindexOf(int ch):在此字符串中查找一个ch所代表的字符,如果存在则返回此字符的索引位置,否则返回-1;

         intindexOf(String str):在此字符串中查找str,如果存在则返回此字符的索引位置,否则返回-1;

         intindexOf(int ch,int fromIndex):在此字符串中查找一个ch所代表的字符,从fromIndex开始找;

         intindexOf(String str,int fromIndex):在此字符串中查找str,从fromIndex开始找;

         Stringsubstring(int start):截取子字符串,从start开始,截取到末尾(返回新字符串,原字符串不变)

         Stringsubstring(int start,int end):截取子字符串,从start开始,到end - 1处;

         publicint lastIndexOf(String str):从右侧开始查找字符串str,如果找到返回这个str在字符串中出现的位置(从左到右)

 */

public class Demo {
	public static void main(String[] args) {
		String s1 = "你好java";
		System.out.println("s1.length() : " + s1.length());
		
		int[] intArray = {24,32,43,25234};
		System.out.println("intArray.length = " + intArray.length);
		
		//2.char charAt(int index)
		//获取j
		char c = s1.charAt(2);
		System.out.println("c = " + c);
		//遍历字符串
		for(int i = 0;i <s1.length() ; i++){
			char cr = s1.charAt(i);
			System.out.print(cr);
		}
		System.out.println();
		//3.int indexOf(int ch)
		System.out.println("indexOf = " + s1.indexOf(98));
		
		//4.int indexOf(String str)
		String s2 = "你好java";
		System.out.println("查找java : " + s2.indexOf("java"));
		
		//5.int indexOf(int ch,int fromIndex)
		System.out.println("查找v : " + s2.indexOf(118,2));
		//6.int indexOf(String str,int fromIndex)
		System.out.println("查找va : " + s2.indexOf("va",2));
		
		//7.String substring(int start)
		//截取java
		System.out.println("截取java:" + s2.substring(2));
		System.out.println("s2 = " + s2);
	
		//8.String substring(int start,int end)
		//截取:ja
		System.out.println("截取ja : " + s2.substring(2,4));
		//截取:java
		System.out.println("截取java : " + s2.substring(2,6));
		
		//9.public int lastIndexOf(String str)
		String s3 = "我爱java";
		System.out.println("s3.lastIndexOf(\"a\") : " + s3.lastIndexOf("a"));
	}
}

1.6 String的例子--遍历字符串和统计字母的数量

 

遍历字符串

public class Demo {
	public static void main(String[] args) {
		String str = "我爱java,我真的爱java,谢谢!";
		for(int i = 0;i < str.length() ; i++){
			char c = str.charAt(i);
			System.out.println(c);
		}
	}
}

统计字母的数量

public class Demo {
	public static void main(String[] args) {
		String str = "fjiERf432Gfdfds2435FDSsdD3";
		int num1 = 0;//大写  7
		int num2 = 0;//小写  11
		int num3 = 0;//数字  8
		
		for(int i = 0; i < str.length() ; i++){
			char c = str.charAt(i);
			if(c >= 'A' && c <= 'Z'){
				num1++;
			}
			if(c >= 'a' && c <= 'z'){
				num2++;
			}
			if(c >= '0' && c <= '9'){
				num3++;
			}
		}
		System.out.println("大写字母的数量:" + num1);
		System.out.println("小写字母的数量:" + num2);
		System.out.println("数字字符的数量:" + num3);
		
	}
}

1.7 String类的转换功能

/*

 *String类的转换功能:

 * 注意:下面的所有方法,都不会对原字符串产生变化

 *   byte[] getBytes():将一个String转换为一个byte[]数组

         char[]toCharArray():将本字符串转换为char[]数组;

         staticString valueOf(char[] chs):静态方法。将字符数组转换为String

         staticString valueOf(int i):静态方法。将一个int值转换为一个String;

         StringtoLowerCase():全部转换为小写

         StringtoUpperCase():全部转换为大写

         Stringconcat(String str):将参数字符串追加到当前字符串的末尾。相当于+符号的字符串相连;

 */

public class Demo {
         publicstatic void main(String[] args) {
                   Strings1 = "abc";
                   s1= "你好";
                   byte[]byteArray = s1.getBytes();//使用GBK
                   for(inti = 0;i < byteArray.length ; i++){
                            System.out.println(byteArray[i]);
                   }
                   System.out.println("------------------------------");
                   s1= "你好java";
                   char[]charArray = s1.toCharArray();
                   for(inti = 0 ;i < charArray.length ; i++){
                            System.out.println(charArray[i]);
                   }
                  
                   charArray= new char[]{'a','b','你','好'};
                   Strings2 = String.valueOf(charArray);
                   System.out.println("s2= " + s2);
                  
                   intn = 200;
                   Strings3 = String.valueOf(n);
                   Strings4 = "" + n;
                   System.out.println("s3= " + s3);
                   System.out.println("s4= " + s4);
                  
                   Strings5 = "Hello";
         //      s5 = "你好";
                   System.out.println("全部转换为大写:" + s5.toUpperCase());
                   System.out.println("全部转换为小写:" + s5.toLowerCase());
                   System.out.println("原字符串s5 = " + s5);
                  
                   Strings6 = "Hello";
                   Strings7 = "World";
                   System.out.println(s6.concat(s7));
         }
}

/*
 * 把一个字符串的首字母转成大写,其余为小写。(只考虑英文大小写字母字符)
 */
public class Demo {
	public static void main(String[] args) {
		String str = "hEllOwoRLD";//转换为:Helloworld
		//1.先全部转换为小写
	/*	str = str.toLowerCase();
		//2.将第一个字母取出
		String s1 = str.substring(0,1);
		String s2 = str.substring(1);
		//3.将s1转换为大写
		s1 = s1.toUpperCase();
		//4.将s1 和 s2链接
		str = s1.concat(s2);
		System.out.println("str = " + str);*/
		
		//写成一句话:
		str = str.substring(0,1).toUpperCase().concat(
				str.substring(1).toLowerCase());
		
		System.out.println("str = " + str);
	}
}

1.8 String类的其它功能

/*

 *String类的其它功能:

 * 替换功能

                   Stringreplace(char old,char new):将字符串中的所有old字符,替换为new字符

                  String replace(String old,String new):将字符串中的所有的old字符串,替换为new字符串;

         去除字符串两空格        

                   Stringtrim():

         按字典顺序比较两个字符串 

                   intcompareTo(String str):区分大小写

                   intcompareToIgnoreCase(String str):不区分大小写

 */

public class Demo {
	public static void main(String[] args) {
		String str = "HelloWorld";
		//将字符串中所有o字符,替换为*字符
		String s1 = str.replace('o', '*');
		System.out.println("s1 = " + s1);
		System.out.println("str = " + str);
		
		//将所有的ll,替换为LL
		s1 = str.replace("ll", "L");
		System.out.println("s1 = " + s1);
		
		//trim():去除字符串两端的空格
		str = "    你好   ";
		s1 = str.trim();
		System.out.println("去除两端空格后:" + s1);
		
		//compareTo():按字典顺序比较两个字符串
		String t1 = "a";
		String t2 = "b";
		String t3 = "c";
		System.out.println("a.compareTo(b) : " + t1.compareTo(t2));//-1
		System.out.println("a.compareTo(c) : " + t1.compareTo(t3));//-2
		
		System.out.println("c.compareTo(a) : " + t3.compareTo(t1));//2
		
		String t4 = "abc";
		String t5 = "aac";
		String t6 = "aa";
		String t7 = "abc";
		String t8 = "abcd";
		String t9 = "abcdef";
		String t10 = "ac";
		String t11 = "ab";
		System.out.println("abc.compareTo(aac) : " + t4.compareTo(t5));//1
		System.out.println("abc.compareTo(aa) : " + t4.compareTo(t6));//1
		System.out.println("abc.compareTo(abc) : " + t4.compareTo(t7));//0
		System.out.println("abc.compareTo(abcd) : " + t4.compareTo(t8));//-1
		System.out.println("abc.compareTo(abcdef) : " + t4.compareTo(t9));//-3(abc的长度 - abcdef的长度)
		System.out.println("abc.compareTo(ac) : " + t4.compareTo(t10));//-1
		System.out.println("abc.compareTo(ab) : " + t4.compareTo(t11));//1(abc的长度-ab长度)
		
		String t12 = "a";
		String t13 = "A";
		System.out.println("a.compareToIgnoreCase(A) : " + t12.compareToIgnoreCase(t13));//0
		
	}
}

1.9 例子--字符串反转

import java.util.Scanner;

/*
 * 字符串反转
 * 举例:键盘录入"abc"		输出结果:"cba"
 * 		     abcd				dcba
 * 
 * 方式一:将字符串倒序遍历,封装为一个新字符串,然后输出
 * 方式二:转换为char数组,将数组的元素,第一和最后一个对调,将第二个和倒数第二个对调....
 */
public class Demo {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一句话:");
		String str = sc.next();
		//将str反转
		String result = "";
		for(int i = str.length() - 1 ; i >= 0 ; i--){
			result = result + str.charAt(i);//""+'c' //"c" + 'b' //"cb" + 'a' //"cba"
		}
		System.out.println("result = " + result);
		
		//方式二:转换为数组,对调元素
		char[] charArray = str.toCharArray();
		for(int i = 0;i < charArray.length / 2 ; i++){
			char c = charArray[i];//首
			charArray[i] = charArray[charArray.length - 1 - i];
			charArray[charArray.length - 1 - i] = c;
			
		}
		//将数组转换为String
		System.out.println("转换数组:" + new String(charArray));
	}
}

/*
 * 统计大串中小串出现的次数
 * 举例:在字符串”woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun”中java出现了5次

 */
public class Demo {
	public static void main(String[] args) {
		String str = "woaijavawozhenaijavawozhendeaijavawozhendehenaijavaxinbuxinwoaijavagun";
		int count = 0;//计数器
		int index = str.indexOf("java");
		while(index != -1){
			count++;
			index = str.indexOf("java",index + 1);
		}
		System.out.println("出现的次数:" + count);
	}
}

2.StringBuffer和StringBuilder

2.1StringBuffer描述

 

/*

 *java.lang.StringBuffer类:

 * 1.之前我们学习使用了String类,String类的一个重要特点:其值是不可变的:

 *   我们经常做一些字符串的拼接操作:例如:

 *                   String str = "Hello";

 *                   str = str + "World";

 *                   System.out.println("str =" + str);//str = HelloWorld

 *  ----------------------------------------------------------------

 *                   int[] array ={1,32,432,432,545};

 *                   String str = "[";

 *                   for(int i = 0;i <array.length ; i++){

 *                             if(i + 1 ==array.length){

 *                                      str += array[i]+ "]";

 *                             }else{

 *                                      str +=array[i] + ", ";

 *                             }

 *                   }

 *                   System.out.println(str);

 *2.StringBuffer类:字符串缓冲区类。

 *             1).一个类似于 String 的字符串缓冲区;

 *             2).虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容(它的内部是可变的)。

 *3.StringBuffer和String的区别:

 *             1).StringBuffer内部的值是可变的;

 *                String的内部的值是不可变的;

 * 4.注意:StringBuffer和String不同,不能使用"字符串字面量"直接赋值:

 *             错误:StringBuffer buf = "abc";  //错误的

 *5.StringBuffer的构造方法:

 *             public StringBuffer() :构造一个初始容量为16的StringBuffer。

 *             public StringBuffer(int capacity):使用一个容量来构造一个StringBuffer。

 *             public StringBuffer(String str):使用一个String构造一个StringBuffer。

 *                                      (将一个String转换为一个StringBuffer)。

 *    说明两个概念:

 *             1).容量:可以存储的字符的数量:capacity()

 *             2).长度:已经存储的字符的数量:length()

 

 */

public class Demo {
	public static void main(String[] args) {
		//1.public StringBuffer() 
		StringBuffer buf = new StringBuffer();
		System.out.println("容量:" + buf.capacity());//16
		System.out.println("长度:" + buf.length());//0
		//2.public StringBuffer(int capacity)
		StringBuffer buf2 = new StringBuffer(30);
		System.out.println("容量:" + buf2.capacity());//30
		System.out.println("长度:" + buf2.length());//0
		//3.public StringBuffer(String str)
		StringBuffer buf3 = new StringBuffer("Hello");
		System.out.println("容量:" + buf3.capacity());//16 + 5 
		System.out.println("长度:" + buf3.length());//5
		
		StringBuffer buf4 = new StringBuffer("aaaaaaaaaaaaaaaaa");//17个字符
		System.out.println("容量:" + buf4.capacity());//16 + 17 
		System.out.println("长度:" + buf4.length());//17
		
	}
}

2.2 StringBuffer的添加功能

/*
 * StringBuffer的添加功能:
 * 
 * public StringBuffer append(String str):将str追加到当前字符序列的末尾;
 * public StringBuffer insert(int offset,String str):将指定 str 插入此序列的offset
 * 												     位置。原offset位置上的字符依次后移;0
 */
public class Demo {
	public static void main(String[] args) {
		StringBuffer buf = new StringBuffer();
		StringBuffer buf2 = buf.append("Hello");
		System.out.println("buf2 = " + buf2);
		System.out.println("buf = " + buf);
		System.out.println("buf2 == buf : " + (buf2 == buf));
		
		/*
		buf.append(12345);
		buf.append(true);
		buf.append('你');
		buf.append('a');
		buf.append('好');
		*/
		buf.append(12345).append(true).append('你').append('a').append('好');
		
		
		System.out.println("buf容量:" + buf.capacity());//原长度 * 2 + 2
		System.out.println("buf长度:" + buf.length());//17
		System.out.println("buf = " + buf);
		
		StringBuffer buf3 = new StringBuffer("HelloWorld");
		//要在World前,加入:Java
		buf3.insert(5, "Java");
		System.out.println("buf3 = " + buf3);
		
		
	}
}

2.3 StringBuffer删除功能

/*
 * 删除功能
 * public StringBuffer deleteCharAt(int index):删除index位置上的字符
 * public StringBuffer delete(int start,int end):删除从start开始 到 end - 1处的所有字符;
 * 
 * 
 */
public class Demo {
	public static void main(String[] args) {
		StringBuffer buf = new StringBuffer("HelloWorld");
		//删除W字符
	//	buf.deleteCharAt(5);
	//	System.out.println("buf = " + buf);//buf内部是可变的;
		
		//删除Hello
		buf.delete(0, 5);
		System.out.println("buf = " + buf);
		
		
		
	}
}

2.4 StringBuffer替换功能

/*
 * 替换功能
 * public StringBuffer replace(int start,int end,String str):替换从start到end - 1 处的所有字符,替换为str
 * 反转功能	 
 * public StringBuffer reverse():反转内部的所有字符;

 */
public class Demo {
	public static void main(String[] args) {
		StringBuffer buf = new StringBuffer();
		buf.append("HelloWorld");
		//将Hello替换为*****
		buf.replace(0, 5, "*****");
		System.out.println("替换后的结果:" + buf);
		
		StringBuffer buf2 = new StringBuffer();
		buf2.append("HelloWorld");
		buf2.reverse();
		System.out.println("buf2 = " + buf2);
	}
}

2.5 StringBuffer截取功能

/*
 * 截取功能:以下两个方法,返回String,原StringBuffer中的内容不变;
 * public String substring(int start):截取从start开始,到内部字符序列的末尾;
 * public String substring(int start,int end):截取从start,到end - 1处
 * 
 */
public class Demo {
	public static void main(String[] args) {
		StringBuffer buf = new StringBuffer();
		buf.append("HelloWorld");
		
		//截取Hello
		String str = buf.substring(0,5);
		System.out.println("str = " + str);//Hello
		System.out.println("buf = " + buf);//HelloWorld
		
		//截取World
		str = buf.substring(5);
		System.out.println("str = " + str);
	}
}

2.6 String和StringBuffer的相互转换

/*
 * String和StringBuffer的相互转换
 * 
 * String --> StringBuffer:
 * 		1.StringBuffer的构造方法:
 * 				StringBuffer buf = new StringBuffer("Hello");
 * 		2.StringBuffer的append()方法
 * 				StringBuffer buf = new StringBuffer();
 * 				buf.append("Hello");
 * StringBuffer --> String:
 * 		1.全部:StringBuffer的toString():
 * 		2.部分:StringBuffer的substring():
 */
public class Demo {
	public static void main(String[] args) {
		//1.String --> StringBuffer
		String str = "Hello";
		//--构造方法
		StringBuffer buf1 = new StringBuffer(str);
		//--append
		StringBuffer buf2 = new StringBuffer();
		buf2.append(str);
		
		//2.StringBuffer --> String
		//--全部:toString()
		String s1 = buf2.toString();
		//--部分:substring()
		String s2 = buf2.substring(2);//llo
		
	}
}

2.7字符串反转

/*
 * 字符串反转:
 * 
 * 1.将字符串转换为StringBuffer;
 * 2.调用StringBuffer的reverse():
 * 3.将StringBuffer转换为String;
 */
public class Demo {
	public static void main(String[] args) {
		String str = "HelloWorld";
		//转换为StringBuffer
		StringBuffer buf = new StringBuffer(str);
		//调用方法,进行反转
		buf.reverse();
		//将StringBuffer转换为String
		String result = buf.toString();
		
		System.out.println("result = " + buf);
		
		
	}
}

2.8 StringBuffer和StringBuilder的区别

/*

 *StringBuffer和StringBuilder的区别:

 * 它们的功能"是完全一样的";

 *1.StringBuffer:

 *             1).从JDK1.0开始

 *             2).线程同步(线程安全的)

 *             3).效率低;

 *2.StringBuild:

 *             1).从JDK1.5开始

 *             2).线程不同步的(线程不安全)

 *             3).效率高;

 */

public class Demo {
	public static void main(String[] args) {
		StringBuffer buf = new StringBuffer();
		long start = System.currentTimeMillis();//获取当前时间的毫秒值;此值从1970年1月1日开始到现在的毫秒值;
		for(int i = 0;i < 40000000 ; i++){
			buf.append(i);
		}
		long end = System.currentTimeMillis();
		System.out.println("Buffer:执行时间:" + ( end - start) + " 毫秒");//2403 毫秒
		
		StringBuilder bld = new StringBuilder();
		start = System.currentTimeMillis();
		for(int i = 0 ;i < 40000000 ; i++){
			bld.append(i);
		}
		end = System.currentTimeMillis();
		System.out.println("Builder:执行时间:" + ( end - start) + " 毫秒");//2006 毫秒
	}
}

2.9 String做为形参和StringBuffer作为形参

/*
 * 看程序写结果:
 * String作为参数传递:
 * StringBuffer作为参数传递:
 * 
 */
public class Demo {
	public static void main(String[] args) {
		String str = "Hello";//str = 0x2233
		fun1(str);//fun1(0x2233);
		System.out.println("str = " + str);//Hello
		
		StringBuffer buf = new StringBuffer("Hello");//0x7788
		fun2(buf);//fun2(0x7788)
		System.out.println("buf = " + buf);//HelloWorld
		
		for(int i = 0 ; i < str.length() / 2 ; i++){
			char c1 = str.charAt(i);
			char c2 =  str.charAt(str.length() - 1 - i);
			if(c1 != c2){
				System.out.println("不是对称串");
			}
		}
	}
	
	public static void fun1(String str){//str = 0x2233
		str = "World";//"World"被开辟新空间存储:str = 0x4455
	}
	public static void fun2(StringBuffer buf){//buf = 0x7788
		buf.append("World");//0x7788.append("World");
	}
}

2.10 例子

/*
 * 把数组拼接成一个字符串
 */
public class Demo {
	public static void main(String[] args) {
		int[] array = {123,54,35,6,5,321,35,46};
		StringBuffer buf = new StringBuffer("[");
		for(int i = 0;i < array.length ; i++){
			//判断是否最后一个元素
			buf.append(array[i]);
			if(i + 1 == array.length){
				buf.append("]");
			}else{
				buf.append(", ");
			}
		}
		//转换为字符串
		String result = buf.toString();
		System.out.println("result = " + result);
	}
}

/*
 * 判断一个字符串是否是对称字符串
 * 例如"abc"不是对称字符串,
 * "aba"、"abba"、"aaa"、"mnanm"是对称字符串
 * 
 * 方式一:将字符串反转,跟原串比较,如果相同,就是对称字符串;
 * 方式二:判断第一个字符和最后一个字符是否相同,然后判断第二个和倒数第二个....
 *      如果发现有一个不同的,就不是对称字符串;
 */
public class Demo {
	public static void main(String[] args) {
		String str = "aaa";
		StringBuffer buf = new StringBuffer(str);
		String result = buf.reverse().toString();
		
	//	System.out.println(buf.reverse().toString());
		if(result.equals(str)){
			System.out.println(str + " 是对称串!");
		}else{
			System.out.println(str + " 不是对称串!");
		}
		
	}
}


 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值