黑马程序员_Java_String

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

第一讲 String类
一、String类概述
String 类代表字符串,多个字符组成的一个序列。Java 程序中的所有字符串字面值(如"abc" )都作为此类的实例实现。
字符串是一个特殊的对象。是一个被final 修饰的类,所以不可能有子类。字符串一旦初始化就不可以被改变。(此处指的是内存中的地址值不可改变。)
字符串初始化:
<span style="font-size:12px;"><span style="font-size:10px;">    String s1="abc";//该语句创建一个"abc"字符串对象
    String s2=new String("abc");//该语句创建两个。一个"abc"字符串对象,在方法区的常量池;一个s2对象,在栈内存。</span></span>

二、构造函数
(1)String():无参构造,初始化一个新创建的String 对象,使其表示一个空字符序列。
构造示例:
<span style="font-size:12px;"><span style="font-size:10px;">    String s = new String();
    s = "hello";</span></span>
(2)String(byte[] bys): 通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的String。
构造示例:
<span style="font-size:12px;">    byte[] bytes = {97,98,99,100};
    String s = new String(bytes);</span>
(3)String(byte[] bys,int index,int length):把字节数组的一部分转换成一个字符串。
构造示例:
<span style="font-size:12px;">    byte[] bytes = {97,98,99,100};
    String s = new String(bytes,1,2);</span>
(4)String(char[] chs):分配一个新的String,使其表示字符数组参数中当前包含的字符序列。
构造示例:
<span style="font-size:12px;">    char[] chs = {'a','b','c','d'}; 
    String s=new String(chs);</span>
(5)String(char[] chs,int index,int length):分配一个新的String,它包含取自字符数组参数一个子数组的字符。
构造示例:
<span style="font-size:12px;">    char[] chs={'a','b','c','d'};
    String s=new String(chs,1,2);</span>
(6)String(String str):初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。
构造示例:
<span style="font-size:12px;">    String s=new String(s1);</span>
(7)String(StringBuffer buffer):分配一个新的字符串,它包含字符串缓冲区参数中当前包含的字符序列。
构造示例:
<span style="font-size:12px;">    StringBuffer sb=new StringBuffer("abc");
    String s=new String(sb);//把字符串缓冲区转化为字符串,可使用字符串的方法。</span>
(8)String(StringBuilder builder):分配一个新的字符串,它包含字符串生成器参数中当前包含的字符序列。
构造示例:
<span style="font-size:12px;">    StringBuilder sb=new StringBuilder("abc");
    String s=new String(sb);//把字符串生成器<span style="font-family: Arial, Helvetica, sans-serif;">转化为字符串,可使用字符串的方法。</span></span>

三、常用方法

1、 获取

(1)int   length():获取长度。字符串中包含的字符数,也就是字符串的长度。

        (2)char  charAt(int  index):返回索引处的char值。根据位置获取位置上的字符。

        (3)根据字符获取该字符存在字符串的位置,未找到对应字符,则返回-1。

              int  indexOf(int ch):返回指定字符ch在字符串中第一次出现的位置;

              int  indexOf(int ch,int fromIndex):从fromIndex指定位置开始,获取ch在字符串中出现的位置;

              int  indexOf(String str):返回指定字符串str在字符串中第一次出现的索引位置;

              int  indexOf(String str,int fromIndex):从fromIndex指定位置开始,获取str在字符串中出现的位置;

              int  lastIndexOf():反向索引,返回指定字符在字符串中最后一次出现的索引位置。

代码示例:

<span style="font-size:12px;">package demo.string;

public class StringMethodDemo {

	public static void main(String[] args) {
		method_get();
	}
	
	public static  void sop(Object obj){
		System.out.println(obj);
	}
	
	public static  void method_get(){
		String str="ajhdea";
		sop(str);
		
		//字符串长度
		sop(str.length());
		//查找字符
		sop(str.charAt(2));
		//查找字符所在位置
		sop(str.indexOf('z',1));
		//从右查找字符所在位置
		sop(str.lastIndexOf('e'));
	}
}</span>

2、判断

        (1)boolean contains(CharSequence s):字符串中是否包含某一个子串,当且 仅当 此字符串包含 字符串包含指定 的 char 值序列 时, 返回 true。

        (2)boolean isEmpty():字符串中是否有内容,原理 :判断长度是否为 0。

        (3)boolean startsWith(str):字符串是否是以指定内容开头。

        (4)boolean endsWith(str):字符串是否是以指定内容结尾。

        (5)boolean equals(str):判断字符串内容是否相同,复写了Object类中的equals方法。

        (6)boolean equalsIgnoreCase():判断内容是否相同,并忽略大小写。

代码示例:

<span style="font-size:12px;">public static void method_is(){
		String str="ArrayDemo.java";
		
		//判断是否以Array开头
		sop(str.startsWith("Array"));
		//判断是否以java结束
		sop(str.endsWith("java"));
		//判断是否包含Demo
		sop(str.contains("Demo"));
		//判断字符串内容是否相同
		sop(str.equals("ArrayDemo.java"));
	}</span>

3、转换

        (1)将字符数组转成字符串

             构造函数:String (char[]):全部转换为字符串

                                 String(char[],offset,count):将字符数组中的一部分转成字符串,offset是指截取数组开始的位置,count代表截取数组的长度。

             静态方法:

                                 static String copyValueOf(char[]);

                                 static String copyValueOf(char[] data,int offset ,int count );

                                 static String valueOf(char[]);

        (2)char[]toCharArray():将字符串转成字符数组

        (3)将字节数组转成字符串

              String (byte[]);

              String(byte[],offset,count):将字节数组中的一部分转成字符串,count表示个数。

        (4)byte[]getBytes():将字符串转成字节数组

        (5将基本数据类型转成字符串

              StringvalueOf(int);

              StringvalueOf(double);

        特殊:字符串和字节数组在转换过程中,是可以指定编码表的。

代码示例:

<span style="font-size:12px;">public static void method_trans(){
		char[] arr={'a','b','c','d','e','f','g'};
		sop(new String(arr,1,4));
		String str="afegha";
		char[] chs=str.toCharArray();
		for(int i=0;i<chs.length;i++){
			sop("ch="+chs[i]);
		}	</span>


4、其他

        (1)替换。String replace(oldchar,newchar):返回的是一个新字符串。如果要替换的字符不存在,返回的还是原字符串。

        (2)分割。String[] split(regex):涉及到正则表达式的点,不能作为切割字符串的regex。

(3)子串,获取字符串中的一部分。

        String substring(begin):从指定位置开始到结尾;

        String substring(begin,end):包含头,不包含尾。

(4)将字符串大小写转换。

String toUpperCase():将字符串转换为大写;

        String toLowerCase():将字符串转换为小写。

(5)去除空格。String trim():将字符串两端的多个空格去除。

(6)比较。int compareTo(String):对两个字符串进行自然顺序的比较。

代码示例:

<span style="font-size:12px;">public static void method_others(){
		String s="   taee   gyeAAgGEya   ";
		sop(s.toLowerCase());
		sop(s.toUpperCase());
		sop(s.trim());
		sop(s.replace('a', 'd'));
		String s1="abc";
		String s2="aaa";
		sop(s1.compareTo(s2));
		
	}</span>


字符串综合示例:
<span style="font-size:12px;">package demo.string;

public class StringTest2 {

	public static void main(String[] args) {
		
		String str="kka a dllkk";
		sop(getStrCount(str,"kk"));
	}
	
	public static  void sop(Object obj){
		System.out.println(obj);
	}
//获取一个字符串在另一个字符串中出现的次数	
	public static int getStrCount(String str,String key){
		int count=0;
		int index=0;
		
		while((index=str.indexOf(key))!=-1){
			count++;
			str=str.substring(index+key.length());
			sop(str);
		}
		return count;
	}
	public static int getStrCount_2(String str,String key){
		int count=0;
		int index=0;
		
		while((index=str.indexOf(key,index))!=-1){
			count++;
			index=index+key.length();
			sop(str);
		}
		return count;
	}
}</span>


第二讲 StringBuffer类
一、概述
StringBuffer是字符串缓冲区类。是一个容器。线程安全的可变字符序列。字符串的组成原理是通过StringBuffer 类实现的。StringBuffer可以对字符串内容进行增删改查等操作,很多方法和String相同。
特点:
(1)长度是可变化的。
(2)可以直接操作多个数据类型。
(3)最终会通过toString方法变成字符串。
StringBuffer与String 区别:

String 一旦被赋值,值将不能发生改变,而StringBuffer 值还可以改变。因StringBuffer 采用的是缓冲机制。一开始,首先开辟一些空间,然后,随着数据的增多,还可以继续开辟空间。这些操作的是同一个对象。String 浪费内存,在操作过程中产生大量的临时对象。


二、构造函数
(1)StringBuffer():构造一个其中不带字符的字符串缓冲区。
(2)StringBuffer(int num):构造一个不带字符,但具有指定初始容量的字符串缓冲区。 
(3)StringBuffer(String str):构造一个字符串缓冲区,并将其内容初始化为指定的字符串内容。 

三、常用方法

1、 存储

        (1)StringBuffer append():将指定数据作为参数添加到已有数据的结尾处。

        (2)StringBuffer insert(intoffset ,数据):可以将数据插入到指定offset位置。

2、 删除

        (1)StringBuffer delete(start,end):删除缓冲区中的数据,包含start,不包含end。

        (2)StringBuffer deleteCharAt(index):删除指定位置的字符。

        清空缓冲区:对象.delete(0,对象.length());

3、 获取

        char charAt(int index);

        int indexOf(String str);

        int lastIndexOf(String str);

        int length();

        String substring(int start,int end);

4、 修改

        StringBuffer replace(int start,int end,String str):替代字符。

        void setCharAt(int index,char ch):设置索引处字符为ch。

5、 反转

        StringBuffer reverse():将字符串反转。

6、 将缓冲区中指定数据存储到指定字符数组中

        void getChars(int srcBegin, int srcEnd,char[] dst,int dstBegin)。

代码示例:

<span style="font-size:12px;">public class StringBufferDemo {

	public static void main(String[] args) {
		
		method_add();
		method_del();
		method_update();
	}
	
	private static void method_update() {
		StringBuffer sb=new StringBuffer("dafeag");
		
//		sb.replace(3,5,"java");
		sb.setCharAt(4, 'z');
		sop(sb.toString());
	}
	private static void method_add() {
		StringBuffer sb=new StringBuffer();
		
		sb.append(45).insert(1, "aa");
		sop(sb.toString());
	}
	
	private static void method_del() {
		StringBuffer sb=new StringBuffer("adgaegeg");
		
		
//		sb.delete(0, sb.length());
		sb.deleteCharAt(3);
		sop(sb.toString());
	}

	public static  void sop(Object obj){
		System.out.println(obj);
	}
}</span>

第三讲 StringBuilder类概述

在JDK1.5版本之后出现了StringBuilder。
StringBuilder是一个可变的字符序列。此类提供一个与StringBuffer 兼容的 API,但不保证同步。该类被设计用作StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比StringBuffer 要快。 
StringBuilder和StringBuffer的功能是一样的,但是有区别:
StringBuffer是线程同步的,一般用于多线程。
StringBuilder是线程不同步的,一般用于单线程。

以后开发,建议使用StringBuilder。如遇多线程,使用StringBuffer或自己加锁。

升级三因素:

        (1)提高效率

        (2)简化书写

        (3)提高安全性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值