黑马程序员_Java_String

来源:互联网 发布:linux文件系统损坏 编辑:程序博客网 时间:2024/05/07 14:00

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
第一讲 String类
一、String类概述
String 类代表字符串,多个字符组成的一个序列。Java 程序中的所有字符串字面值(如”abc” )都作为此类的实例实现。
字符串是一个特殊的对象。是一个被final 修饰的类,所以不可能有子类。字符串一旦初始化就不可以被改变。(此处指的是内存中的地址值不可改变。)
字符串初始化:
String s1=”abc”;//该语句创建一个”abc”字符串对象
String s2=new String(“abc”);//该语句创建两个。一个”abc”字符串对象,在方法区的常量池;一个s2对象,在栈内存。

二、构造函数
(1)String():无参构造,初始化一个新创建的String 对象,使其表示一个空字符序列。
构造示例:
String s = new String();
s = “hello”;
(2)String(byte[] bys): 通过使用平台的默认字符集解码指定的 byte 数组,构造一个新的String。
构造示例:
byte[] bytes = {97,98,99,100};
String s = new String(bytes);

(3)String(byte[] bys,int index,int length):把字节数组的一部分转换成一个字符串。
构造示例:
byte[] bytes = {97,98,99,100};
String s = new String(bytes,1,2);

(4)String(char[] chs):分配一个新的String,使其表示字符数组参数中当前包含的字符序列。
构造示例:
char[] chs = {‘a’,’b’,’c’,’d’};
String s=new String(chs);

(5)String(char[] chs,int index,int length):分配一个新的String,它包含取自字符数组参数一个子数组的字符。
构造示例:
char[] chs={‘a’,’b’,’c’,’d’};
String s=new String(chs,1,2);

(6)String(String str):初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列;换句话说,新创建的字符串是该参数字符串的副本。
构造示例:
String s=new String(s1);
(7)String(StringBuffer buffer):分配一个新的字符串,它包含字符串缓冲区参数中当前包含的字符序列。
构造示例:
StringBuffer sb=new StringBuffer(“abc”);
String s=new String(sb);//把字符串缓冲区转化为字符串,可使用字符串的方法。

(8)String(StringBuilder builder):分配一个新的字符串,它包含字符串生成器参数中当前包含的字符序列。
构造示例:
StringBuilder sb=new StringBuilder(“abc”);
String s=new String(sb);//把字符串生成器转化为字符串,可使用字符串的方法。

三、常用方法
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():反向索引,返回指定字符在字符串中最后一次出现的索引位置。
代码示例:

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'));    }}

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():判断内容是否相同,并忽略大小写。
代码示例:

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"));    }

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将基本数据类型转成字符串
String valueOf(int);
String valueOf(double);
特殊:字符串和字节数组在转换过程中,是可以指定编码表的。
代码示例:

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]);        }   

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):对两个字符串进行自然顺序的比较。
代码示例:

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));    }

字符串综合示例:

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;    }}

第二讲 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)。
代码示例:

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);    }}

第三讲 StringBuilder类概述

在JDK1.5版本之后出现了StringBuilder。
StringBuilder是一个可变的字符序列。此类提供一个与StringBuffer 兼容的 API,但不保证同步。该类被设计用作StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比StringBuffer 要快。
StringBuilder和StringBuffer的功能是一样的,但是有区别:
StringBuffer是线程同步的,一般用于多线程。
StringBuilder是线程不同步的,一般用于单线程。
以后开发,建议使用StringBuilder。如遇多线程,使用StringBuffer或自己加锁。
升级三因素:
(1)提高效率
(2)简化书写
(3)提高安全性。

0 0
原创粉丝点击