Java基础——String+基本数据类型对象包装类


1)  String概述

概述:

String类是对字符串事物的描述。该类定义了专门用于操作字符串的方法。

 请看如下代码:

class StringDemo 

{

         public static void main(String[] args) 

         {

                   /*

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

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

                                                        //s1="kk";

                                                        //此时s1指向"kk"对象

                   String s2 = new String("abc");

                   String s3="abc";  //s1==s3是正确的

 

                   //s1和s2有什么区别?

                   //s1在内存中有一个对象。("abc"是一个对象)

                   //s2在内存中有两个对象。

                   

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

                   System.out.println(s1.equals(s2));//String类复写了Object类中equals方法,

                                                                                             //该方法用于判断字符串是否相同。

 

                   */

 

                   String s = "abcde";

                   method_1(s);

         }

 

         public static void method_1(String s)

         {

                   char ch = s.charAt(3);

 

                   System.out.println("ch="+ch);

                   int num = s.codePointAt(3);

 

                   System.out.println("num="+num);

 

                   String s1 = "qq";

                   s1 = s1.concat("mm");

 

                   System.out.println("s1="+s1);

                   System.out.println("qq"+"mm");

 

                   String a = "opq";

                   String b = "opq";

                   System.out.println("a==b:"+(a==b));
         }

}


 

2)  String常见功能

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

String s=new String();等同String s="";都是创建对象

 

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

 

常见的操作有哪些?

"abcd"

 

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)

2,判断。

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

                   boolean contains(str):

                  特殊之处:indexOf(str):可以索引str第一次出现位置,如果返回-1.表示该str不在字符串中存在。

                                    所以,也可以用于对指定判断是否包含。

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

        

3,转换。

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

                  构造函数:String(char[])

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

                  应用:

                                     char c[]={'a','b','c','d','e'};

                                     String s1=new String(c);

 

                  静态方法:

                                     static String copyValueOf(char[]);

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

 

                                     static String valueOf(char[]):

                    运用:

                    char a[]={'a','b','c','d'};

                   String s=String.valueOf(a);

                   String s1=String.copyValueOf(a);

 

                  

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

                   char[] toCharArray():

                  应用:

                   String s1="abcdefg";

                   char c[]=new char[10];

                   c=s1.toCharArray();

                   for(int i=0;i<s1.length();i++)

                   {

                            System.out.print("  "+c[i]);

                   }

 

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

                            String(byte[])

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

 

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

                            byte[]  getBytes():

 

                   String s1="asdfggh";

                   byte a[]=new byte[100];

                   a=s1.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);

         String substring(begin,end);

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

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

                    String toUpperCase();

                    String toLowerCase();

 

         7.2 将字符串开头和结尾的多个空格去除。

                   String trim();

                   //去除所有空格:replace(" ","");

 

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

                   int compareTo(string);

                  相同返回0,只比较一个出现不相同的的字符就返回int 

         请看如下案例:

class  StringMethodDemo

{

 

         public static void method_7()

         {

                   String s = "    Hello Java     ";//字符串对象

                   sop(s.toLowerCase());

                   sop(s.toUpperCase());

                   sop(s.trim());

 

                   String s1 = "a1c";

                   String s2 = "aaa";

 

                   sop(s1.compareTo(s2));

         }

         public static void method_sub()

         {

                   String s = "abcdef";

 

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

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

         }

 

         public static void  method_split()

         {

                   String s = "zhagnsa,lisi,wangwu";

 

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

 

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

                   {

                            sop(arr[x]);

                   }

         }

 

         public static void method_replace()

         {

                   String s = "hello java";

                   //String s1 = s.replace('q','n');//如果要替换的字符不存在,返回的还是原串。

                   String s1 = s.replace("java","world");

                   sop("s="+s);

                   sop("s1="+s1);

         }

 

         public static void method_trans()

         {

                   char[] arr = {'a','b','c','d','e','f'};

 

                   String s= new String(arr,1,3);

 

                   sop("s="+s);

 

                   String s1 = "zxcvbnm";

 

                   char[] chs = s1.toCharArray();

 

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

                   {

                            sop("ch="+chs[x]);

                   }

         }

         public static void method_is()

         {

                   String str = "ArrayDemo.java";

                   

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

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

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

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

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

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

         }

         public static void method_get()

         {

                   String str = "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_7();

//               method_trans();

//               method_is();

//               method_get();

                   /*

                   String s1 = "abc";

                   String s2 = new String("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)  StringBuffer缓冲区

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

 

什么时候使用?

数据类型不确定,长度不确定,最终要转换成字符串类型的情况;

 

特点:

1,长度是可变化的。

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

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

 

C create U update R read D delete

 

1,存储。

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

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

 

 

2,删除。

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

         StringBuffer deleteCharAt(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(start,end,string);

         void setCharAt(int index, char ch) ;

 

 

5反转,将字符串反转。

         StringBuffer reverse();//可以自定义

 

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

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

 

具体应用:

class Demo

{

}

 

class StringBufferDemo 

{

         public static void main(String[] args) 

         {

                   //method_update();

 

                   StringBuilder sb = new StringBuilder("abcdef");

         

                   char[] chs = new char[6];

 

                   sb.getChars(1,4,chs,1);//将

 

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

                   {

                            sop("chs["+x+"]="+chs[x]+";");

                   }

 

//               StringBuilder sb1 = new StringBuilder();

//               sb1.append(new Demo()).append(new Demo());

//               sop("sb1="+sb1);

         }

         public static void method_update()

         {

                   StringBuffer sb  = new StringBuffer("abcde");

 

//               sb.replace(1,4,"java");

                   sb.setCharAt(2,'k');

 

 

                   sop(sb.toString());

         

         }

         public static void method_del()

         {

                   StringBuffer sb  = new StringBuffer("abcde");

                   

//               sb.delete(1,3);

                   //清空缓冲区。

                   //sb.delete(0,sb.length());

 

                   //sb.delete(2,3);

                   sb.deleteCharAt(2);

 

                   sop(sb.toString());

         }

 

         public static void method_add()

         {

                   StringBuffer sb = new StringBuffer();

 

 

                   //sb.append("abc").append(true).append(34);

//               StringBuffer sb1 = sb.append(34);

//               sop("sb==sb1:"+(sb==sb1));

 

                   sb.insert(1,"qq");

                   sop(sb.toString());//abctrue34

                   //sop(sb1.toString());

 

                   

         }

         

         public static void sop(String str)

         {

                   System.out.println(str);
}

4)  StringBuilder

StringBuilder也是字符串缓冲区。

JDK1.5 版本之后出现了StringBuilder.

 

StringBuffer是线程同步。

StringBuilder是线程不同步。

他们拥有的方法都相同,只是同步不同步;

 

以后开发,建议使用StringBuilder,效率高;

考虑安全性时才用StringBuffer

 

升级三个因素:

1,提高效率。

2,简化书写。

3,提高安全性。

 

请看如下程序:

class Demo

{

}

 

class StringBufferDemo 

{

         public static void main(String[] args) 

         {

                   //method_update();

 

                   StringBuilder sb = new StringBuilder("abcdef");

         

                   char[] chs = new char[6];

 

 

                   sb.getChars(1,4,chs,1);//将

 

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

                   {

                            sop("chs["+x+"]="+chs[x]+";");

                   }

 

                   draw(3,6);

                   draw(8,9);

 

//               StringBuilder sb1 = new StringBuilder();

//               sb1.append(new Demo()).append(new Demo());

//               sop("sb1="+sb1);

         }

         public static void method_update()

         {

                   StringBuffer sb  = new StringBuffer("abcde");

 

//               sb.replace(1,4,"java");

                   sb.setCharAt(2,'k');

 

 

                   sop(sb.toString());

         

         }

         public static void method_del()

         {

                   StringBuffer sb  = new StringBuffer("abcde");

                   

//               sb.delete(1,3);

                   //清空缓冲区。

                   //sb.delete(0,sb.length());

 

                   //sb.delete(2,3);

                   sb.deleteCharAt(2);

 

                   sop(sb.toString());

         }

 

         public static void method_add()

         {

                   StringBuffer sb = new StringBuffer();

 

 

                   //sb.append("abc").append(true).append(34);

//               StringBuffer sb1 = sb.append(34);

//               sop("sb==sb1:"+(sb==sb1));

 

                   sb.insert(1,"qq");

                   sop(sb.toString());//abctrue34

                   //sop(sb1.toString());

 

                   

         }

 

         

         public static void sop(String str)

         {

                   System.out.println(str);

         }

         

         public static void draw(int row,int col)

         {

                   StringBuilder sb = new StringBuilder();

                   for(int x=0; x<row; x++)

                   {

                            for(int y=0; y<col; y++)

                            {

                                     sb.append("*");

                            }

                            sb.append("\r\n");

                   }

 

                   sop(sb.toString());

         }
}

5)  基本数据类型对象包装类

将基本数据类型封装成对象的好处,在于可以在对象中定义更多的功能方法操作该数据。

基本数据类型对象包装类的最常见作用,就是用于基本数据类型和字符串类型之间做转换

 

包装类如下:

byte Byte

short         short

int              Integer

long Long

boolean Boolean

float Float

double      Double

char Character

 

 

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

 

         基本数据类型+""

 

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

 

         如: Integer.toString(34);//34整数变成"34";

 

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

 

         静态调用方式:

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

 

十进制转成其他进制。

         toBinaryString();2进制

         toHexString();16进制

         toOctalString();8进制

 

 

其他进制转成十进制。

         parseInt(string,radix);

    int x = Integer.parseInt("110",2);//2进制的110转成10进制

 请看如下案例:

class IntegerDemo 

{

         public static void sop(String str)

         {

                   System.out.println(str);

         }

         

         public static void main(String[] args) 

         {

                   //整数类型的最大值。

                   //sop("int max :"+Integer.MAX_VALUE);

 

//               将一个字符串转成整数。

 

                   int num = Integer.parseInt("123");//必须传入数字格式的字符串。

                   //long x = Long.parseLong("123");

 

//               sop("num="+(num+4));

 

//               sop(Integer.toBinaryString(-6));

//               sop(Integer.toHexString(60));

 

                   int x = Integer.parseInt("3c",16);

 

                   sop("x="+x);

         }

}

6)  基本数据类型对象包装类新特性

 

"==":比较的是对象的内存地址;

"a.equals(b)":比较的是数值,equals()方法是继承Object的,Java中任何对象都有比较方法;

JDK1.5版本以后出现的新特性:

1.自动装箱,拆箱

2.当数值在byte范围内时(-128127),对于新特性,如果该数值已经存在,为了节省空间,则不会在开辟新的空间

 

应用程序如下:

class IntegerDemo1

{

         public static void main(String[] args) 

         {

                   

//               Integer x = new Integer(4);

 

                   Integer x = 4;//自动装箱。//new Integer(4)

 

                   x = x/* 拆箱原理x.intValue() */ + 2;//x+2:x 进行自动拆箱。变成成了int类型。和2进行加法运算。

                                               //再将和进行装箱赋给x。

 

                   Integer m = 128;

                   Integer n = 128;//结果为false,开辟新空间,创建新对象

 

                   sop("m==n:"+(m==n));

 

                   Integer a = 127;

                   Integer b = 127;

 

                   sop("a==b:"+(a==b));//结果为true。因为a和b指向了同一个Integer对象。

//因为当数值在byte范围内时(-128到127),对于新特性,如果该数值已经存在,为了节省空间,则不会在开辟新的空间。

         }

 

         public static void method()

         {

                   Integer x = new Integer("123");

 

                   Integer y = new Integer(123);

 

                   sop("x==y:"+(x==y));

                   sop("x.equals(y):"+x.equals(y));

         }

 

         public static void sop(String str)

         {

                   System.out.println(str);

         }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值