Java学习笔记(String类)

11 篇文章 0 订阅
1 篇文章 0 订阅

String

String

         字符串是一个特殊的对象。

         字符串一旦初始化就不可以被改变。

         String str=”abc”;

         String str1=new String(“abc”);

         有什么区别?

            Str在内存中有一个对象。

                   Str1在内存中有两个对象。

         System.out.println(str==str1);   //fulase

         System.out.println(str.equals(str1));  //String类复写了Object类中equals方法,该方法用于判断字符串是否相同。

例:

classstringDemo

{

    public static void main(String[] args)

    {

       String s1 = "abc";

       String s2 = new String("abc");

       String s3 = "abc";

       System.out.println(s1==s2);     //false

       System.out.println (s1.equals(s2));    //true

System.out.println(s1==s3);     //true

    }

}

String S1=”abc”;  //s1是一个类类型变量,“abc”是一个对象。

S1是一个类类型变量,类类型变量一定指向对象,所以”abc”是一个对象。字符串最大特点是,一旦被初始化就不可以被改变(只能改变对象的引用,原值不会变)

基本数据类型比较的是内容,引用数据类型比较的是地址值,所以s1==s2是比较的地址值,结果为false.由于String类覆写了object类中的equals方法,并建立了自己对象独特的判断相同的内容(该方法用于判断字符串是否相同),所以这里比较的是内容是否相等,结果为true.   s1s2的区别:s1在内存中有一个对象,s2在内存中有两个对象。

字符串对象比较特殊,Strings1 = "abc";这个字符串对象在常量池中存在了,s3在进行初始化的时候发现abc已经在内存中存在了,它就不会再独立开辟空间了,若再开辟空间比较浪费,也就是说在字符串对象中,只要内容相同,就不会再开辟空间,这里s1s3指向的是同一个对象,所以结果是true

 

String类适用于描述字符串事物。

那么它就提供了多个方法对字符串进行操作。

常见的操作有哪些?

abcd”

1.获取。

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

         int length():获取长度。

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

         char charAtint index):

         1.3根据字符获取该字符在字符串中位置。

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

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

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

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

         int lastIndexOfint ch;

例:

classstringMethod

{

    public static void main(String[] args)

    {

       String s = "fdstwetg";

       method(s.length());//获取长度

       method(s.charAt(10));//当访问到字符串中不存在的角标时会发生StringIndexOutOfBoundsException

       method(s.indexOf('t'));//获取字符的位置

       method(s.indexOf('t',5));//如果没有找到,返回-1

    }

    static void method(Object obj)

    {

       System.out.println(obj);

    }

}

2.判断。

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

           boolean containsstr):

           特殊之处:indexOfstr):可以索引str第一次出现位置,如果返回-1,表示该str不在字符串中存在。所以,也可以用于对指定判断是否包含。

                   ifstr.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();

例:

         class StringMethodDemo

{

         public static void method_is()

         {

                   Stringstr="ArrayDemo.java";

 

                   //判断文件名称是否是Array单词开头。

                   sop(str.startsWith("Array"));

                   //判断文件名称是否是.java的文件。

                   sop(str.endsWith(".java"));

                   //判断文件中是否包含Demo

                   sop(str.contains(".java"));

 

         }

 

         public static void method_get()

         {

                   Stringstr="abcdeakpf";

 

                   //长度

                   sop(str.length());

 

                   //根据索引获取字符。

                   sop(str.charAt(4));  //当访问到字符串中不存在的角标时会发生StringIndexOutOfBoundsException

 

                   //根据字符获取索引

                   sop(str.indexOf('m',3));  //如果没有找到,返回-1.

 

                   //反向索引一个字符出现位置。

                   sop(str.lastIndexOf("a"));

 

         }

 

         public static void main(String[] args)

         {

                   method_is();

                   method_get();

 

                   String s1="abc";

                   String s2=newString("abc");

                   String s3="abc";

                   System.out.println(s1==s2);

                   System.out.println(s1==s3);

 

         }

 

         public static void sop(Object obj)

         {

                   System.out.println(obj);

 

         }

}

3.转换。

         3.1将字符数组转成字符串。

         构造函数:String(char[])

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

         静态方法:

                   static StringcopyValueOf(char[]);

                   static StringcopyValueOf(char[] data,int offset,int count)

                   static StringvalueOf(char[]);

         3.2将字符串转成字符数组。

         char[] toCharArray();

         3.3将字节数组转成字符串。

                   String(byte[])

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

         3.4将字符串转成字节数组。

                   byte[] getBytes();

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

         static String valueOf(int)

         static String valueOf(double)

         //3+"";//String.valueOf(3);

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

4.替换

         String replace(oldchar,newchar);

5.切割

         String[] split(regex);

6.子串。获取字符串中的一部分。

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

         String substring(begin,end);  sop(s.substring(2,4));  //包含头,不包含尾。s.substring(0,s.length());

例:

classstringDemo

{

staticvoid methodReplace()

{

    String s = "study hard";

    String s1 = s.replace('h','b');//若替换的字符不存在,返回的还是原字符串。

    sop(s1);

}

staticvoid methodSplit()

{

    String s2 = "hello,word,java";

    String[] arr = s2.split(",");

    for (int x = 0;x<arr.length ;x++ )

    {

       sop(arr[x]);

    }

}

staticvoid methodSubstring()

{

    String s3 = "abcdewg";

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

    sop(s3.substring(3,6));//包含头,不包含尾。获取全部内容可写:s3.substring(0,s.length());

}

staticvoid sop(Object obj)

{

    System.out.println(obj);

}

public staticvoid main(String[] args)

{

    methodReplace();

    methodSplit();

    methodSubstring();

}

}

7.转换,去除空格,比较。

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

         String toUpperCase();

         String toLowerCase();

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

         String trim();

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

         int compareTo(string);

例:获取两个字符串中最大相同子串,第一个动作:将短的那个串进行长度一次递减的子串打印。

         “abcwerthelloyuiodef”

         “cvhellobnm”

         思路:

1,  将短的那个子串按照长度递减的方式获取到。

2,  将每获取到的子串去长串中判断是否包含,如果包含,已经找到。

代码:

         class StringTest4

{

         public static StringgetMaxSubString(String s1,String s2)

         {

                   Stringmax="",min="";

                   max=(s1.length()>s2.length())?s1:s2;

                   min=(max==s1)?s2:s1;

                   sop("max="+max+"...min="+min);

 

                   for(intx=0;x<min.length();x++)

                   {

                            for(inty=0,z=min.length()-x;z!=min.length()+1;y++,z++)

                            {

                                     Stringtemp=min.substring(y,z);

                                     //sop(temp);

                                     if(max.contains(temp))   //if(s1.indexOf(temp)!=-1)

                                     return temp;

                            }

                   }

                   return "";

         }

         public static void main(String[] args)

         {

                   String s1="ab";

                   Strings2="cvhellobnm";

                   sop(getMaxSubString(s2,s1));

         }

 

         public static void sop(String str)

         {

                   System.out.println(str);

         }

}

 

StringBuffer

StringBuffer

         字符串的组成原理就是通过该类实现的。

         StringBuffer可以对字符串内容进行增删。

         StringBuffer是一个容器。

         很多方法与String相同。

         StringBuffer是可变长度的。

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

特点:

1.      长度是可变化的。

2.      可以字节操作多个数据类型。

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

操作:

C  create U  update  R read  D  delete

1、存储

  StringBufferappend( );  //将指定数据作为参数添加到已有数据结尾处。返回的是原缓冲区对象。

  StringBufferinsert(index,数据);  //可以将数据插入到指定index位置。

2、删除

  StringBufferdelete(start,end);  //删除缓冲区中的数据,包含start,不包含end.

  StringBufferdeleteCharAt(index);  //删除指定位置的字符。

  sb.delete(0,sb.length());  //清空缓冲区。

3、获取

  char charAt(intindex);    //返回指定索引处的char值。

  int indexOf(Stringstr);  //返回指定子字符串在此字符串中第一次出现处的索引。

  intlastIndexOf(String str);  //返回指定子字符串在此字符串中最右边出现处的索引。

  int length();        //返回此字符串的长度。

  Stringsubstring(int start,int end);   // 返回一个新字符串,它是此字符串的一个子字符串。

4、修改

  StringBufferreplace(int start,int end,String str);

   void setCharAt(intindex,char ch);

5、反转

  Stringbufferreverse( );

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

  void getChars(intsrcBegin, int srcEnd, char[] dst, int deterging)

 

JDK1.5版本之后出现了StringBuilder

StringBuffer是线程同步。

StringBuilder是线程不同步。

以后开发,建议使用StringBuilder

 

升级三个因素:

1.      提高效率;

2.      简化书写;

3.      提高安全性。

 

基本数据类型对象包装类

byte     Byte

short    short

int      Integer

long     Long

boolean  Boolean

float     Float

double   Double

char     Character

基本数据类型对象包装类的最常见作用:

就是用于基本数据类型和字符串类型之间做转换。

1、基本数据类型转成字符串:

     基本数据类型+””

基本数据类型.toString(基本数据类型值);

     :Integer.toStrng(34);     //34整数变成”34”字符串。

2、字符串转成基本数据类型:

         xxx a=xxx.parsexxx(String);

         int a=Integer.parseInt(“123”);

         double b=Double.parseDouble(“12.23”);

         boolean b=Boolean.parseBoolean(“true”);

         Integer i=new Integer(“123”);

         int num=i.intValue();

例:

classstringBuffer

{

    public static void main(String[] args)

    {

       method_del();

    }

    public static void sop(String str)

    {

       System.out.println(str);

    }

    public static void method_del()

    {

       int num =Integer.parseInt("32");

       sop("num="+(num+3));

    }

}

 

十进制转成其他进制:

         toBinaryString();

         toHexString();

         toOctalString();

其他进制转成十进制:

         parseInt(string,radix);

 

 

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值