黑马程序员---String类

来源:互联网 发布:meli melo 知乎 编辑:程序博客网 时间:2024/05/22 23:01
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、String

1、概述

String是字符串的类类型,用于描述字符串事物。字符串是一个特殊的对象。

2、特点

字符串最大的特点就是:一旦被初始化就不可以被改变。

字符串类是被final修饰的,意味着字符串不能被继承。

例:

String s1="string";String s2 = new String("string");

比较的结果:

s1==s2(false)    // == 比较的是字符串对象的内存地址值,在这里s1,s2是不同的对象,其地址值不同s1.equals(s2)(true)    //String类复写了Object类中的equals方法,该方法用于判断字符串是否相同。 
s1s2的区别:

        s1在内存中有一个对象。

        s2在内存中有两个对象。 

 创建方法:

<span style="font-size:10px;">String s = new String(char a[])String s = new String (char a[],int offset,int length)String s = new String(char[] value)  </span><span style="font-size: 14px;">        </span>

3、常见操作方法

1、获取

        1.1字符串中包含的字符数,也就是字符串的长度

               int   length()://获取长度。

        1.2根据位置获取位置上的某个字符

               char  charAtint  index)://当访问到字符串中不存在的角标时,会发生字符串角标越界的错误。

        1.3根据字符获取该字符存在字符串的位置

              int  indexOfint ch)://返回的是ch在字符串中第一次出现的位置。//传入的是字符对应的ASCII码。//如果没有找到,返回-1

              int  indexOfint chint fromIndex)://fromIndex指定位置开始,获取ch在字符串中出现的位置。

              int  indexOfString str)://返回的是str在字符串中第一次出现的位置。

              int  indexOfString strint fromIndex)://fromIndex指定位置开始,获取str在字符串中出现的位置。

              int  lastIndexOf()://反向索引 

2、判断

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

              boolean   containsstr);

        //特殊之处:indexOfstr)可以索引str第一次出现的位置,如果返回-1表示该str不在字符串中存在。所以,也可以用于对指定判断是否包含。如:ifstr.indexOf“aa”)!=-1)而且该方法既可以判断,又可以获取出现的位置。如果只为判断,用contains

        2.2字符串中是否有内容

              booleanifEmpty()//原理就是判断长度是否为0

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

              booleanstartsWithstr);

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

              booleanendsWithstr);

        2.5判断字符串内容是否相同,复写了Object类中的equals方法

              booleanequalsstr);

        2.6判断内容是否相同,并忽略大小写。

              booleanequalsIgnoreCase();

3、转换

        3.1将字符数组转成字符串

             构造函数:String (char[])

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

             静态方法:

                                 static String copyValueOf(char[])

                                 staticString copyValueOf(char[] data,int offset ,int count )

                                 static String valueOf(char[])

        3.2将字符串转成字符数组

              char[]toCharArray()

        3.3将字节数组转成字符串

              String (byte[])

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

        3.4将字符串转成字节数组

              byte[]getBytes()

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

              StringvalueOf(int)

              StringvalueOf(double)

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

4、替换

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

5、切割

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

6、子串,获取字符串中的一部分

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

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

7、转换,去除空格,比较

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

              StringtoUpperCase();

              String toLowerCase();

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

              String trim();        

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

              intcompareTo(String)

二、StringBuffer

1、概述

        StringBuffer是一个容器,字符串的组成原理就是通过该类实现的。StringBuffer可以对字符串内容进行增删改查等操作,很多方法和String相同。

2、特点

        1、而且长度是可变化的。(数组是固定的)

        2、可以直接操作多个数据类型。(数组只能操作一个)

        3、最终会通过toString方法变成字符串。

3、常见操作

1、存储

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

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

2、删除

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

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

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

3、获取

        char charAt(int index)//当访问到字符串中不存在的角标时,会发生字符串角标越界的错误。

        int indexOf(String str)//返回的是str在字符串中第一次出现的位置。

        int lastIndexOf(String str)//返回的是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、将缓冲区中指定数据存储到指定字符数组中

 voidgetChars(int srcBegin, int srcEnd,char[] dst,int dstBegin);

三、StringBuilder

  StringBuilder是一个容器,字符串的组成原理就是通过该类实现的。StringBuider可以对字符串内容进行增删改查等操作。

与StringBuffer的区别:

        StringBuffer是线程同步的。有锁。效率低

        StringBuilder是线程不同步的。无锁。效率高

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

四、练习

trim() 的实现:

package string;public class TrimDemo {public static void main(String[] args) {// TODO 自动生成的方法存根String s = "     wing     ";System.out.println(trim(s));}public static String trim(String str){int start = 0;int end = str.length()-1;while(start<=end&&str.charAt(start)==' ')start++;while (start<=end&&str.charAt(end)==' ') end--;return str.substring(start, end+1);//截取子字符串时,留首不留尾,故end值要+1}}
反转字符串:

package string;public class ReverseDemo {public static void main(String[] args) {// TODO 自动生成的方法存根String s = "dingooeownogjownongioneiog";System.out.println(reverse(s));}public static String reverse(String str){char[] chs = str.toCharArray();for(int start=0,end=chs.length-1;start<end;start++,end--){char temp;temp = chs[start];chs[start]= chs[end];chs[end]=temp;}return new String(chs);}}
给定一个子字符串,获取其中另一个字符串中的个数:

package string;public class SubStringNumDeom {public static void main(String[] args) {// TODO 自动生成的方法存根String s = "dinieinignienigiengoingienngieng";String s1 ="in";if(s.contains(s1))System.out.println(getSubNum(s,s1));else System.out.println(0);}public static int getSubNum(String str,String substr){int count = 0;int index = 0;while(index != -1){if(count != 0)index = index+substr.length();index = str.indexOf(substr,index);if(index!=-1)count++;}return count;}}

查表法例子

/** * 从键盘接受一个数字,列出该数字的中文表示格式,例如:键盘输入123,打印出一二三;键盘输入3103,打印出三一零三。 * 思路: * 1.创建输入流,接收来自键盘的数据; * 2.通过查表法来判断该该数字的中文字符; * 3.使用StringBuilder方法叠加中文形式的字符串; * 4.打印字符串 */package com.itheima;import java.io.*;public class Test3 {public static String format(String str){//通过查表法判断数字的中文字符char dicitionary[] = {'零','一','二','三','四','五','六','七','八','九'};//创建个数据表StringBuilder sb = new StringBuilder();char charArray[] = str.toCharArray();//将字符串转换成字符数组for(char ch:charArray){if((int)ch<48||(int)ch>57)return "contain unnum";//判断输入字符值是否是数值sb.append(dicitionary[(int)ch - 48]);//追加中文字符}return sb.toString();}public static void main(String[] args)throws IOException {BufferedReader in = new BufferedReader(new InputStreamReader(System.in));//创建从键盘输入的缓冲输入流对象String str = null;Tag:while(true){while((str=in.readLine())!=null){if(str.equals("over")) //结束标志break Tag;else if(str.equals(""))continue;else if(format(str).equals("contain unnum")){System.out.println("输入数值含有字符,请重新输入:");//若出现非数字字符的处理意见continue;}elseSystem.out.println(format(str));//打印结果}in.close();//关闭流对象并释放与该流相关的系统资源。}}}


0 0
原创粉丝点击