黑马程序员-Java基础-String和StringBuffer学习笔记

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------
  字符串是由数字、字母、下划线组成的一串字符。字符串最大的特点是:一旦被初始化就不可以被改变,字符串常量存储在常量池中。一般在开发中,String用于存储长度不变的字符串,而StringBuffer会用来存储可变长度的字符串。
 字符串常见的操作:
 1、获取
   1.1 字符串中包含的字符数,也就是字符串的长度。
       Int length():获取长度。
   1.2 根据位置获取位置上的某个字符
       char charAt(int index)
   1.3 根据字符获取该字符在字符串中的位置。
       int indexOf(int ch):返回的是ch在字符串中第一次出现的位置。
       int IndexOf(int ch, int fromIndex):从 fromIndex指定位置开始,获取ch在字符串中出现的位置。
       int indexOf(string str):返回的是str在字符串中第一次出现的位置。
       int lastIndexOf(String str, int fromIndex) 返回指定子字符串str在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索。 
       int lastIndexOf(String str)  返回指定子字符串在此字符串中最右边出现处的索引。 
       int lastIndexOf(int ch)  返回指定字符在此字符串中最后一次出现处的索引。  
 2、判断
   2.1 字符串中是否包含某一个子串
       boolean contains(str)
                       特殊之处:indexOf(str)可以索引str第一次出现的位置,如果返回-1,表示该str不在字符串中。
                      所以,也可以用于对指定字符串判断是否包含。if(str.indexOf("aa"!=-1)),
                      而且 该方法既可以判断字符串包含某一个字符串,又可以获取出现的位置。
   2.2 字符中是否有内容
       boolean isEmpty():原理就是判断长度是否为0
   2.3 字符串是否是以指定内容开头
       boolean startsWith(str)
   2.4 字符串是否是以指定内容结尾
        boolean endsWith(str)
   2.5 判断字符串的内容是否相同,复写了Object类中的equals方法
       boolean equals(str)
   2.6 判断内容是否相同,并忽略大小写
       boolean equalsIgnoreCase(String anotherString) 
 3、转换
   3.1 将字符串转成字符数组
       cha[] toCharArrary()
   3.2 将字符数组转成字符串
                       构造函数:String(char[])
                                        String(char[],offset,count):将字符数组中的一部分转成字符串,offset偏移量即开始位置
                       静态方法:static String copyValueOf(char[] data)  
                                         返回指定数组中表示该字符序列的 String。 
                                          static String copyValueOf(char[] data, int offset, int count) 
                                          返回指定数组中表示该字符序列的 String。 
                                          static String valueOf(char[] data) 
                                           返回 char 数组参数的字符串表示形式。 
   3.3 将字符串转成字节数组
       byte[] getBytes()
   3.4 将字节数组转成字符串
        构造函数:String(byte[])
                           String(byte[],offset,count):将字节数组中的一部分转成字符串,offset偏移量即开始位置
   3.5 将基本数据类型转化为字符串
       static string valueOf(int)
       static string valueOf(double)
                       例如:3+"" //String.valueOf(3)
                      特殊:字符串和字符数组在转换过程中,是可以指定编码表的。
 4、替换
   string replace(oldchar,newchar) 
   string replace(oldstring,newstring) 
 5、切割
   string[] split(regex)
 6、子串         获取字符串中的一部分
   String substring(beginindex)
   String substring(beginindex,endindex)
 7、转换 、去除空格,比较
   7.1 将字符串转成大写或这小写
       String toUperCase()
       string toLowerCase()
   7.2 将将字符串两端的多个空格去除
       string trim()
   7.3 对两个字符串进行顺序的比较
       int compareTo(string)
 
基本数据类型对象包装类
byte    Byte
short  Short
int       Integer
long   Long
float   Float
char   Character
基本数据类型包装类的最常用法:基本数据类型和字符串类型之间的转化。
   基本数据类型转成字符串:
              基本数据类型+""
              基本数据类型.toString(基本数据类型值)
              例如:Integer.toString(34);//将整型数据34转成字符串"34"
    字符串转成基本数据类型: 
               基本数据类型包装类xxx 则xxx.parseXxx(str)
               例如:int x =Integer.parseInt("123");//必须数字
                           boolean b =Boolean.parseBoolean("true")

String代码示例如下:
package blog.Javase.String;
/**
 * String常用方法举例
 * @author kevin
 *
 */
public class StringMethod 
{
	public static void main(String[] args) 
	{
       method_get();
       method_if();
       method_trans();
       method_replace();
       method_split();
       method_sub();
       method_trans7();
	}
	
    public static  void method_get()
    {
    	String str = "abasdfshcdef";
    	//长度
    	printf(str.length());
    	//根据索引获取字符
    	printf(str.charAt(3));//当访问到字符串中不存在的角标时会反生StringIndexOutOfBundsException
    	//根据字符获取索引
    	printf(str.indexOf('a',1));//如果没有找到,返回-1
    	//反向索引一个字符出现的位置. 返回指定子字符串在此字符串中最右边出现处的索引。
    	printf(str.lastIndexOf("c"));
    }
   
    public static void method_if()
    {
    	String str = "ArrayDemo.java";
    	//判断字符串是否以Array开头
    	printf(str.startsWith("Array"));
    	//判断字符串是否是.java文件
    	printf(str.endsWith(".java"));
        //判断字符串是否以Demo结尾
    	printf(str.contains("Demo"));
    }
    
    public static void method_trans()
    {
    	char[]  arr = {'a','b','c','d','e','f'};
        String str = new String(arr);
        String str2 = new String(arr,1,2);
        printf("str="+str);
        printf("str2="+str2);
        
        String s1 = "cvxssadzadz";
        char[] chs = s1.toCharArray();
        for(int x=0; x<chs.length; x++)
        {
        	printf("chs="+chs[x]);
        }
    }
    public static void method_replace()
    {
    	String s = "hello world";
    	//String s1 =s.replace('e','k');//replace替换原串返回新串,原串本身没有变化。如果替换的旧字符不存在则返回原串。
    	String s2 = s.replace("world", "java");
    	printf(s);
    	printf(s2);
    }
    public static void method_split()
    {
    	String str = "zhangsan,lisi,wangwu";
    	String[] arr = str.split(",");
    	for(int x=0; x<arr.length; x++)
    	{
    		printf(arr[x]);
    	}
    }
    public static void method_sub()
    {
    	String str = "abcdefg";
    	printf(str.substring(2));//从指定位置到结尾,如果角标不存在,会发生字符串角标越界
    	printf(str.substring(2, 4));//包含头,不包含尾 str.substring(0,str.length())
    }
    public static void method_trans7()
    {
    		String s = "   hello world    ";
    		printf(s.toUpperCase());
    		printf(s.toLowerCase());
    		printf(s.trim());
    		String s1 = "a1b";//1的ASCII值49
    		String s2 = "aaa";//返回正数、负数和0来表示大小,比较的是字符在ASCII表中的顺序
    		printf(s1.compareTo(s2));
    }
    public static void printf(Object obj)
    {
    	System.out.println(obj);
    }
}
 stringbuffer是一个字符串容器,用于存储可变长度的字符。, 
 stringBuffer的特点:
 1、长度是可变化的
 2、可以直接添加多个数据类型
 3、最终会通过toString方法变成字符串
      具有增删改查功能。
 1、存储
   stringBuffer append()将指定数据作为参数添加到已有的数据结尾处
   StringBuffer insert(offset,object)可以将数据插入到指定index位置。
 2、删除
   stringBuffer delete(start,end):删除缓冲区中的数据,包含start,不包含end
   stringBuffer deleteCharAt(index);删除指定位置的字符
 3、获取
    char charAt(int index) 返回此序列中指定索引处的 char 值。
    int indexOf(String str) 返回第一次出现的指定子字符串在该字符串中的索引。 
    int lastIndexOf(String str) 返回最右边出现的指定子字符串在此字符串中的索引。 
    int length() 返回长度(字符数)。 
    String substring(int start, int end)  返回一个新的 String,它包含此序列当前所包含的字符子序列。 
 4、修改
    void setCharAt(int index, char ch)  将给定索引处的字符设置为 ch。 
    StringBuffer replace(int start, int end, String str) 
                使用给定 String 中的字符替换此序列的子字符串中的字符。
 5、反转
    stringBuffer reverse(); 
 6、   将字符从此序列复制到目标字符数组 dst。   将缓冲区中指定数据存储到指定字符数组中。
    void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 

StringBuffer常用方法示例如下:
package blog.Javase.String;
/**
 * StringBuffer:字符串缓冲区方法举例
 * @author kevin
 *
 */
public class StringBufferDemo {

	public static void main(String[] args)
	{
          method_add();	
          method_del();
          method_update();
          method_reverse();
          method_getClass();
	}

	public static void method_add()
	{
		   StringBuffer sb = new StringBuffer();
		   sb.append("abc");
		   sb.append(true);
		   sb.append(32);
		   sb.insert(3, "-insert-");
		   print(sb);
	}
	public static void method_getClass()
	{
		   StringBuffer sb = new StringBuffer("abcdefg");
           char[] chs = new char[6];
           sb.getChars(1, 4, chs, 1);
           for(int x=0; x<chs.length; x++)
           {
        	   print("chs["+x+"]="+chs[x]+";");
           }
	}
	public static void method_reverse()
	{
		   StringBuffer sb = new StringBuffer();
		   sb.append("abc");
		   sb.reverse();
		   print(sb);
	}
	public static void method_del()
	{
		  StringBuffer sb = new StringBuffer("abcjkl");
		  sb.delete(2, 3);//清空1-3角标下的数据
		  //清空缓冲区
		  //sb.delete(0,sb.length());
		  //删除指定位置的字符
		  sb.deleteCharAt(2);
		  print(sb.toString());
	}
	public static void method_update()
	{
		  StringBuffer sb = new StringBuffer("abcde");
	      sb.replace(1, 3, "dd");
	      sb.setCharAt(1, 'k');
		  print(sb.toString());
	}
	
	public static void print(Object obj) 
	{
		System.out.println(obj);
	}
}
从JDK1.5之后出现了stringBuilder
         StringBuffer是线程同步的。适用于多线程,需要判断锁。效率不高。
         StringBuilder是线程不同步的。适用于单线程。效率较高。

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------
详细请查看: http://edu.csdn.net
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值