找工作String类(重点,背诵)(本质是一个类)

  一个顶层设计者眼中只有2个东西接口,类(属性,方法)

无论String 类 , HashMap实现类 , Map接口

 

String str = "Hello" ;    // 定义字符串,工作中就用这个方法,另外的一个方法不用

  对于String而言肯定是一个类,str应该就是这个类的对象,能够点出来这个类的方法。

String毕竟是一个类,那么类之中一定会存在构造方法,String类的构造:public String(String str)

 String str = new String("Hello") ;   // 定义字符串

可以通过构造方法为String类对象实例化。

 

 

面试题:请解释字符串比较之中“==”和equals()的区别?

         · ==:比较的是两个字符串内存地址的数值是否相等,属于数值比较;

         · equals():比较的是两个字符串的内容,属于内容比较。

         以后进行字符串相等判断的时候都使用equals()

 

 

 

public class StringDemo {

         public static void main(String args[]) {

                   String str = null ;          // 假设是输入的

                   if (str.equals("Hello")) {

                            System.out.println("条件满足。") ;

                   }

         }

}

Exception in thread "main" java.lang.NullPointerException

        at StringDemo.main(StringDemo.java:4)

         而如果说现在将代码反过来操作:

 

 

public class StringDemo {

         public static void main(String args[]) {

                   String str = null ; // 假设是输入的

                   if ("Hello".equals(str)) {

                            System.out.println("条件满足。") ;

                   }

         }}

         因为字符串常量就是一个匿名对象,匿名对象永远不可能为null,这样的比较才更加的合理。

 

 

String类的两种实例化方式的区别

在String类进行设计的时候采用了一种称为共享设计模式的概念

如果用户采用了直接赋值的方式,会将字符串的内容放入到池之中,以供其他继续使用直接赋值方式的String对象使用,如果新声明的字符串内容不再池之中,则会开辟一个新的,继续放到池,以供下次使用

   public static void main(String args[]) {

                   String str1 = new String("Hello") ;

                   String str2 = "Hello" ;  // 入池

                   String str3 = "Hello" ;  // 使用池对象

                   System.out.println(str1 == str2) ;    // false

                   System.out.println(str1 == str3) ;    // false

                   System.out.println(str2 == str3) ;    // true

         }

 

 

面试题:请解释String类的两种对象实例化方式的区别?

         · 直接赋值:只开辟一块堆内存空间,字符串的内容可以自动入池,以供下次使用;

         · 构造方法:开辟两块堆内存空间,有一块将成为垃圾,并且不能自动入池,使用intern()手工入池。

         在日后的所有开发之中,String对象的实例化永远都采用直接赋值的方式完

 

字符串的内容一旦声明则不可改变

String str = "Hello " ;
str += "World " ;
str= str + "!!!" ;
System.out.println(str) ;

输出:

Hello World !!!

字符串内容的更改,实际上改变的是字符串对象的引用过程,并且会伴随有大量的垃圾出现

3.2String类的常用方法(重点,背

         String类除了之前所介绍的两个方法之外,还存在着大量的其他操作,考虑到String类在实际的工作之中使用非常的广泛,那么就建议大家都背下来,以下所讲解的每一个方法:记住方法的名称、返回值类型、参数的类型及个数、方法的作用

 

3.2.1 、字符串与字符

         在很多的语言之中,都强调,字符串由字符数组所组成,那么这一概念在Java的String类之中也有体现。

No.

方法名称

类型

描述

1

public String(char[] value)

构造

将全部的字符数组内容变为字符串

2

public String(char[] value, int offset, int count)

构造

将部分字符数组变为字符串,offset表示开始点,count表示要操作的长度

3

public char charAt(int index)

普通

取得指定索引位置上的字符

4

public char[] toCharArray()

普通

将字符串转换为字符数组

 

 

 

 

范例:验证charAt()方法,这个方法是一个标志性方法

public class StringDemo {

         public static void main(String args[]) {

                   String str = "helloworld" ;

                   char c = str.charAt(7) ;

                   System.out.println(c) ;

         }

}

 

 

 

范例:字符串和字符数组转换,完成一个小写字符串变为大写字符串的操作,小写字母和大写字母差了32

public class StringDemo {

         public static void main(String args[]) {

                   String str = "helloworld" ;

                   char data [] = str.toCharArray() ;     // 字符串变为字符数组

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

                            System.out.print(data[x] + "、") ;

                            data [x] -= 32 ;    // 变大写

                   }

                   System.out.println() ;

                   System.out.println("全部字符数组变为字符串:" + new String(data)) ;

                   System.out.println("部分字符数组变为字符串:" + new String(data,0,5)) ;

         }

}

 

char data [] = {76 , 79 , 86 , 69 , 'A'} ;
System.out.println(new String(data)); //输出 : LOVEA

 

2 、字符串与字节

String str = "abc" ;
byte data [] = str.getBytes() ; // 字符串变为字节数组
System.out.println(Arrays.toString(data));

// 输出  [97, 98, 99]

人造字符串:

byte data [] = {76 , 79 , 86 , 69} ;
System.out.println(new String(data));  // 自己编程的,LOVE

         字符串除了与字符可以互相转换之外,还可以和字节互相转换,操作方法:

No.

方法名称

类型

描述

1

public String(byte[] bytes)

构造

将全部的字节数组变为字符串

2

public String(byte[] bytes, int offset, int length)

构造

将部分的字节数组变为字符串

3

public byte[] getBytes()

普通

将字符串变为字节数组

4

public byte[] getBytes(String charsetName) throws UnsupportedEncodingException

普通

字符串转码操作

 

         一般情况下,在程序之中如果要想操作字节数组只有两种情况:

 

                   · 情况一:需要进行编码的转换时;

                    情况二:数据要进行传输的时候。

 

 

 

3 、字符串比较

      范例:equals()方法

public class StringDemo {

         public static void main(String args[]) {

                   String str1 = "helloworld" ;

                   String str2 = "HELLOWORLD" ;

                   System.out.println(str1.equals(str2)) ;

                   System.out.println(str1.equalsIgnoreCase(str2)) ;

         }

}

         如果现在要想比较两个字符串的大小关系,那么就必须使用compareTo()方法完成,而这个方法返回int型数据,而这个int型数据有三种结果:大于(返回结果大于0)、小于(返回结果小于0)、等于(返回结果为0

范例:比较大小compareTo()方法,C语言方法同

System.out.println("a".compareTo("b"));    //     输出-1

public class StringDemo {

         public static void main(String args[]) {

                   String str1 = "Helloworld" ;

                   String str2 = "HELLOWORLD" ;

                   System.out.println(str1.compareTo(str2)) ;

                   System.out.println("Hello".compareTo("Hello")) ;

         }

}

         对于compareTo()方法一定要记住其返回的类型,以后还会有其他的深入讲解。

 

 

 

 

 

4 、字符串查找

      

No.

方法名称

类型

描述

1

public boolean contains(String s)

普通

查找指定的子字符串是否存在,JDK 1.5之后有

2

public int indexOf(String str)

普通

从头查找指定字符串的位置,找不到返回-1

3

public int indexOf(String str, int fromIndex)

普通

由指定位置向后查找字符串的位置,找不到返回-1

4

public int lastIndexOf(String str)

普通

由后向前查找字符串的位置,找不到返回-1

5

public int lastIndexOf(String str, int fromIndex)

普通

从指定位置由后向前查找

6

public boolean startsWith(String prefix)

普通

判断是否以指定的字符串开头

7

public boolean startsWith(String prefix, int toffset)

普通

从指定位置判断是否以指定字符串开头,JDK 1.7

8

public boolean endsWith(String suffix)

普通

判断是否以指定的字符串结尾

 

 

 

范例:判断开头和结尾操作

public class StringDemo {

         public static void main(String args[]) {

                   String str = "**@@hello##" ;

                   System.out.println(str.startsWith("**")) ;

                   System.out.println(str.startsWith("@@",2)) ;

                   System.out.println(str.endsWith("##")) ;

         }

}

 

 

 

范例:使用contains()方法查找字符串是否存在,直接返回boolean,用于各种的执行判断

public class StringDemo {

         public static void main(String args[]) {

                   String str = "helloworld" ;

                   System.out.println(str.contains("hello")) ;

                   System.out.println(str.contains("xx")) ;

         }

}

 

 

 

3.2.5 、字符串替换操作

         Oracle中的替换函数是replace(),那么String类之中的替换操作有如下几个方法:

No.

方法名称

类型

描述

1

public String replaceAll(String regex, String replacement)

普通

全部替换

2

public String replaceFirst(String regex, String replacement)

普通

替换首个

范例:验证两个替换操作

public class StringDemo {

         public static void main(String args[]) {

                   String str = "Hello World ." ;

                   System.out.println(str.replaceAll("l","_")) ;       // He__o Wor_d .

                   System.out.println(str.replaceFirst("l","_")) ;     // He_lo World .

         }

}

 

 

 

6 、字符串截取

         Oracle的截取是substr()函数,这个函数在使用的时候下标从0或1开始都是可以的,不过程序之中只能从0开始,而且不能设置为负数。

No.

方法名称

类型

描述

1

public String substring(int beginIndex)

普通

从指定位置截取到结尾

2

public String substring(int beginIndex, int endIndex)

普通

截取指定范围的内容

范例:字符串截取

public class StringDemo {

         public static void main(String args[]) {

                   String str = "Hello World ." ;

                   System.out.println(str.substring(6)) ;       

                   System.out.println(str.substring(0,5)) ;    

         }

}

 

7 、字符串拆分

         所谓的拆分操作指的就是按照一个指定的字符串标记,对一个完整的字符串进行分割。如果要完成拆分操作,可以使用的方法如下:

No.

方法名称

类型

描述

1

public String[] split(String regex)

普通

按照指定的字符串全拆分

2

public String[] split(String regex, int limit)

普通

拆分为指定的长度

范例:完成全拆分

public class StringDemo {

         public static void main(String args[]) {

                   String str = "Hello World !!!" ;

                   String result [] = str.split(" ") ;

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

                            System.out.println(result[x]) ;

                   }

         }

}

 

范例:现在要求拆分IP地址

public class StringDemo {

         public static void main(String args[]) {

                   String str = "192.168.1.1" ;

                   String result []= str.split("\.") ;

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

                            System.out.println(result[x]) ;

                   }

         }

}

提示:以后在进行字符串拆分的时候,如果遇见拆不开的问题,就使用“\”

 

 

 

 

 

 

 

8 、其他方法

         以上是一些可以分类的功能性的方法,但是在String类中还有一些无法分类的方法,下面统一列出。

No.

方法名称

类型

描述

1

public boolean isEmpty()

普通

判断是否为空字符串(""

2

public int length()

普通

取得字符串长度

3

public String trim()

普通

去掉左右空格

4

public String toLowerCase()

普通

将全部字符串转小写

5

public String toUpperCase()

普通

将全部字符串转大写

6

public String intern()

普通

入池

7

public String concat(String str)

普通

字符串连接

范例:取得字符串长度和是否为空

public class StringDemo {

         public static void main(String args[]) {

                   String str = "hello" ;

                   System.out.println(str.isEmpty()) ;  // false

                   System.out.println("".isEmpty()) ;  // true

                   System.out.println(str.length()) ;

                  System.out.println("  Hello  ".length()) ; // 空格也计算

         }

}

范例:使用trim()去掉空格

public class StringDemo {

         public static void main(String args[]) {

                   String str = "   hello  " ;

                   System.out.println("字符串内容:〖" + str + "〗") ;

                   System.out.println("字符串内容:〖" + str.trim() + "〗") ;

                   // 对象.方法().方法().方法()...代码链,看每个方法的返回值

                   System.out.println("字符串长度:" + str.trim().length()) ;

         }

}

                   String s = str.trim () ;

                   int len = s.length() ;

                   System.out.println("字符串长度:" + len) ;

 

原文地址:https://www.cnblogs.com/cs-lcy/p/8453318.html