黑马程序员-java字符串总结

来源:互联网 发布:合肥seo网络推广 编辑:程序博客网 时间:2024/06/05 08:58

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------


一、String概述:

例1:

class StringDemo {public static void main(String[] args) {String s1="aaa";String s2=new String("aaa");String s3="aaa";System.out.println(s1==s2);System.out.println(s1==s3);System.out.println(s1.equals(s2));}}

输出结果:

falsetruetrue

由此例可知,

1)new String("SOME_STRING")方法与“SOME_STRING”方法创建字符串的方式不同,前者在内存中有两个对象,后者则为一个(背后机制请参考延伸阅读);

2)字符串对象已经存在的,就不在内存中创建新的;

3)String类复写了Object类中的equals()方法,用于判断字符串是否相同。


二、常见功能:

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 indexOf(String str,int fromIndex):从fromIndex指定位置开始,获取str在字符串中出现的位置

int lastIndexOf(int ch):返回的是ch在字符串中最后一次出现的位置

例2:

class StringDemo {public static void main(String[] args) {String s1="aaa";//获取System.out.println(s1.length());    //获取字符串的长度System.out.println(s1.charAt(1));   //根据位置获取位置上的某个字符System.out.println(s1.indexOf('a'));//根据字符获取该字符在字符串中位置}}

输出结果:

3a0

2、判断

2.1 字符串中是否包含一个子串

boolean contains(String str)

特殊:int indexOf(String str):可以索引str第一次出现的位置。如果返回-1,则表示str不在字符串中存在。所以,该方法也可以用于判断是否包含一个子串。

2.2 字符串中是否有内容

boolean isEmpty:原理就是判断长度是否为0

2.3 字符串是否以指定内容开头

boolean startsWith(String str)

2.4 字符串是否以指定内容结尾

boolean endsWith(String str)

2.5 判断字符串内容是否相同

boolean equals(String str):复写了Object类中的同名方法

2.6 判断字符串内容是否相同,且忽略大小写

boolean equalsIgnoreCase(String str)

例3:

class StringDemo {public static void main(String[] args) {String s1="aaa";String s2="abc";//判断System.out.println(s1.contains("a"));   //判断s1是否包含"a"System.out.println(s1.startsWith("a")); //判断s1是否以"a"开头System.out.println(s1.isEmpty());       //判断s1是否是空字符串System.out.println(s1.equals(s2));      //判断s1是否和s2相同}}
输出结果:

truetruefalsefalse

3、转换

3.1 将字符数组转成字符串

构造函数:String(char[] data)

    String(char[] data,int offset,int count):将字符数组中的一部分转成字符串

静态方法:static String copyValueof(char[] data)

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

    static String Valueof(char[] data)

3.2 将字符串转成字符数组

char[] toCharArray()

3.3 将字节数组转成字符串

String(byte[] data)

String(byte[] data,int offset,int count)

3.4 将字符串转成字节数组

byte[] getBytes()

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

static String valueof(int data)

static String valueof(double data)

3.6 将字符串转成大写或小写

String toUpperCase()

String toLowerCase()


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

例4:

class StringDemo {public static void main(String[] args) {String s1="aaa";//转换char[] cha=new char[3];cha=s1.toCharArray();                   //字符串转成字符数组byte[] byt=new byte[3];byt=s1.getBytes();                      //字符串转成字节数组System.out.println(cha);System.out.println(byt);System.out.println(new String(cha));    //字符数组转成字符串System.out.println(new String(byt));    //字节数组转成字符串System.out.println(String.valueOf(cha));//字符数组转成字符串System.out.println(String.valueOf(123));//基本数据类型转成字符串System.out.println(s1.toUpperCase());   //字符串转成大写形式}}

输出结果:

aaa[B@11b75be2aaaaaaaaa123AAA

4、替换

String replace(char oldChar,char newChar):如果要替换的字符不存在,返回的还是原字符串

5、子串

String substring(int begin):从指定位置开始到结尾;如果角标不存在,会出现字符串角标越界异常

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

6、切割

String[] split(regex)

7、去除空格

将字符串两端的多个空格去除

String trim()

8、比较

对两个字符串进行自然顺序的比较

int compareTo(String str)

例5:

class StringDemo {public static void main(String[] args) {String s1="abc";//替换System.out.println(s1.replace('a','d'));System.out.println(s1.replace("ab","de"));//切割String s2="abc,deg,fsd";String[] arr=s2.split(",");for(String str :arr){System.out.println(str);}//子串String s3="asdgfdwewtfdgfd";System.out.println(s3.substring(2));System.out.println(s3.substring(2,4));//去除两端空格System.out.println(s2.trim());//比较System.out.println(s1.compareTo(s3));}}

输出结果:

dbcdecabcdegfsddgfdwewtfdgfddgabc,deg,fsd-17

三、StringBuffer:

StringBuffer是字符串缓冲区,是一个容器。

特点:

1)长度可以变化;

2)可以直接操作多个数据类型

3)最终会通过toString()方法变成字符串

常见功能:

1、存储

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

StringBuffer insert(int index,data):可以讲数据插入到index指定的位置

2、删除

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

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

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)

5、反转

StringBuffer reverse()

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

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

例6:

class StringDemo {public static void main(String[] args) {//存储StringBuffer sb=new StringBuffer();StringBuffer sb1=sb.append(34);System.out.println("sb==sb1:"+(sb==sb1));  //面盆理论System.out.println(sb.append(true).append("abc").toString());//方法调用链sb.insert(1,"qq");System.out.println(sb.toString());//删除sb.delete(0,3);System.out.println(sb.toString());sb.deleteCharAt(2);System.out.println(sb.toString());//修改sb.replace(0,2,"java");System.out.println(sb.toString());//反转sb.reverse();System.out.println(sb.toString());}}
输出结果:

sb==sb1:true34trueabc3qq4trueabc4trueabc4tueabcjavaueabccbaeuavaj

StringBuilder:

JDK1.5版本后出现了StringBuilder

StringBuffer是线程同步;StringBuilder是线程不同步。以后开发,单线程时建议使用StringBuilder。


延伸阅读:

1、从根本上认识String类和String池;

2、String对象的创建原理;

3、认识trim()、intern()、concat()、“+”、空格、空串、null;

请参阅深入java字符串


---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com

0 0
原创粉丝点击