Java菜鸟之字符串(五)

Java中的字符串当做对象来处理。java中提供了String类,StringBuild类和StringBuffer来实现对字符串的处理。通过String类创建的对象时值不可以再改变,而StringBuild类和StringBuffer类可以对于字符串灵活的处理。首先在这里先了解一下String对象的声明和初始化。

一:String的声明以及初始化

String的声明格式有两种,格式如下:

String s = "hello";

String s1 = new String("hello");

String s2 = "hello":

这两种声明方式是等价的,但是在编程中一般使用的是第一种方式,下面来看一下这个两个不同。

第一种方式是 先在栈中声明一个s对象, 之后把堆内中的hello的引用指向赋给s。而第二种方式是先通过new关键字声明一个hello,在堆中分配内存,之后再为s在堆中分配一个空间,让s指向新分配的堆内存hello。第二种方式容易造成垃圾的内存。同时重点说的是s和s1他们是相等,他们指向的是堆中同一个地址。具体如图:

Java菜鸟之字符串(五)_第1张图片

也可以通过代码来看一下如下:

public class TestString{
    
	public static void main(String args[]){
	        String s1 = "hello" ;//声明s对象
		String s2 = s1 ;
		String s3 = new String("hello");//声明一个s1的对象
                System.out.println("s1,s2,s3地址的比较:");
                //s == s1 比较的是它们的地址是否相同
 System.out.println("s1-->>s2 = "+(s1==s2));
 System.out.println("s1-->>s3 = "+(s1==s3));
 System.out.println("s2-->>s3 = "+(s2==s3));
 System.out.println("s1,s3,s2内容的比较:");

 
  
                          
  //equsls 方法比较的是对象的内容是否相同
System.out.println("s1.equals(s2) = "+s1.equals(s2));System.out.println("s1.equals(s3) = "+s1.equals(s3));System.out.println("s2.equals(s3) = "+s2.equals(s3));}}
 
   输出的结果如下: 
  

s1,s2,s3地址的比较: s1-->>s2 = true s1-->>s3 = false s2-->>s3 = false s1,s3,s2内容的比较: s1.equals(s2) = true s1.equals(s3) = true s2.equals(s3) = true

对于equals()方法是比较字符串的内容是否相等,在下面会详细介绍的。

在学习字符串时需要记住字符串的内容定义之后不可以改变,具体解释如图:

Java菜鸟之字符串(五)_第2张图片


       二:String类的主要方法
          String 类是java.lang包下的一个类,类中提高了对于字符串处理的方法,主要有截取,搜索,比较,判断结尾和其他类型转换的方法,在这里主要了解一下常用的处理字符串的方法。 
2.1 字符串的长度 length()方法
  length方法的作用主要是来计算String 的长度。在这里需要注意的是在就算字符串的长度时,里面的空格也包括。
2.2 字符串的比较compareTo()方法,equals()方法
在Java中提供了许多进行比较字符串的方法,在这里主要介绍equals()方法和compareTo()方法。equsls方法主要比较的是字符串中的内容是否相等,返回的是布尔值,true 或者false。而第二中compareTo方法是按照字典的顺序比较两个字符串,该比较基于字符串的各个字符的Unicode值,返回的值是正数,负数或者0.如果字符串比第二个字符串较大则正数,反之为负数。相等为0.当然也可以通过==来判断字符串是否相等。值得注意的是“==”判断字符串不仅仅判断内容是否相等而且和判断它们的地址是否相等。下面来看一下这两个方法的使用。

2.21 equals()方法
equals方法主要比较的字符串的内容是否相等,覆盖了Object类中的equals方法。主要两种方法,一个是比较内容区分大小写,一种是不区分大小写。两种方法的定义如下:
public boolean equals(Object anobject) ;
public boolean equalsIgnoreCase(Object anobject);
第一种方法是比较此字符串与指定的对象。当且仅当该参数不为 null,并且是表示与此对象相同的字符序列的String 对象时,结果才为true。
第二种方法是将此 String 与另一个 String 进行比较,不考虑大小写。如果两个字符串的长度相等,并且两个字符串中的相应字符都相等(忽略大小写),则认为这两个字符串是相等的。
在忽略大小写的情况下,如果下列至少一项为 true,则认为 c1 和c2 这两个字符相同。 
这两个字符相同(使用 == 运算符进行比较)。 
对每个字符应用方法 Character.toUpperCase(char) 产生相同的结果。
对每个字符应用方法 Character.toLowerCase(char) 产生相同的结果。
参数:anotherString - 与此 String 进行比较的 String。Character.toLowerCase(char)的方法是把字符串转换成小写。Character.toUpperCase(char)的方法是把字符串转换成大写。在下面会介绍到。
来看一下这两个方法的应用。
String s = "java"; 
String s1 = "java";
String s2 = "JAVA";
String s4 = "hello";
System.out.println("s1与s的比较   =  " + s.equals(s1));
System.out.println("s1与s2的比较  =  " + s.equals(s2));
System.out.println("s与s2的比较  =  " + s.equalsIgnoreCase(s1));
System.out.println("s1与4的比较  =   " + s1.equals(s4));
运行的结果为:
s1与s的比较   =  true 
s1与s2的比较  =  false 
s与s2的比较  =  true 
s1与4的比较  =   false
2.22 compareTo()方法
compareTo()方法主要是依据字符串在字典中的顺序来比较的。该比较基于字符串中各个字符的 Unicode 值。将此String 对象表示的字符序列与参数字符串所表示的字符序列进行比较。如果按字典顺序此 String 对象在参数字符串之前,则比较结果为一个负整数。如果按字典顺序此String 对象位于参数字符串之后,则比较结果为一个正整数。如果这两个字符串相等,则结果为 0;方法的定义如下:
public int compareTo(String anotherString)
public intcompareToIgnoreCase(String anotherString)
第二个方法是不考虑大小写的比较此方法返回一个整数,它的正负号是调用compareTo 的正负号,调用时使用了字符串的规范化版本,其大小写差异已通过对每个字符调用Character.toLowerCase(Character.toUpperCase(character)) 得以消除。注意的是这个比较不考虑语言环境,因此在某些特定语言环境下可能造成不良理想的排序。
String s = "java"
String s1 = "java";
String s2 = "JAVA"
String s4 = "hello"
System.out.println("s1与s的比较   =  " + s.compareTo(s1));
System.out.println("s1与s4的比较  =  " + s.compareToIgnoreCase(s4));
System.out.println("s与s2的比较  =  " + s.compareTo(s2));
System.out.println("s与s1的比较  =  " +(s==s1));
System.out.println("s与s1的比较  =  " +s==s1);
结果输出结果:
s1与s的比较   =  0 
s1与s4的比较  =  2 
s与s2的比较  =  32
s与s1的比较  =  true
false
在这里需要注意的是红色的部分,第一个红色的结果为true而第二个结果为false,"s与s1的比较  =  " +s 连接之后再与s1比较,所以结果为false
2.3 获取字符在字符串的位置的索引
Java中提供了许多获取字符在字符串位置索引的方法,例如indexOf(String ch),lastIndexOf()等方法。在这里来看一下着两个方法。
2.31 
indexOf(String ch)方法
indexOf(int ch)方法主要是实现获取字符第一次在字符串出现的索引,索引值从0到字符串的长度-1,如果没有在返回-1.方法定义为 
public int indexOf(String ch)
获取字符所在字符串的索引也可以从指定的位置开始查找,需要使用的是indexOf(String ch,
int fromIndex)方法,方法定义如下:
public int indexOf(String str,int fromIndex)
    从指定的索引处开始,返回第一次出现的指定子字符串在此字符串中的索引。存在在返回所在的索引值,需要注意的是字符串的索引从0开始。如果不存在在返回-1.
    lastIndexOf
方法的定义是 public int lastIndexOf(String str)
    主要的作用是返回在此字符串中最右边出现的指定子字符串的索引
    返回值:
    如果在此对象中字符串参数作为一个子字符串出现一次或多次,则返回最后一个这样的子字符串的第一个字符。如果它不作为一个子字符串出现,则返回 -1。
    lastIndexOf(String ch,int fromIndex)
   这个方法是从指定的索引位置开始查找,返回在此字符串中最后一次出现的指定子字符串的索引。
    2.4 截取字符串 substring
    在java中有时需要获得字符串中一部分的字符,例如 获得"hello,java"中java这个字符串。对于这样的不要使用所有的字符串,java提供了两种方法来实现这个功能。方法的定义如下:
     public String substring(int beginIndex)
     public String substring(int beginIndex,int endIndex)
     publicStringsubstring(int beginIndex) 
     这个方法是返回一个新的字符串,它是此字符串的一个子字符串。该子字符串始于指定索引处的字符,一直到此字符串末尾。其中包括从beginindex索引出的字符。截取字符串时当索引位置不正确是,会抛出
IndexOutOfBoundsException异常,代表的是索引值为负或者超出字符串的最大索引值。
       
      public String substring(int beginIndex,int endIndex)
     这个方法是获取从指定的索引值开始的字符到结束位置的索引-1的字符。字符的长度为
endIndex-1 - beginIndex 。重点注意的是最好的endIndex位置的字符不包括。

 
  
 
 

你可能感兴趣的:(Java菜鸟之字符串(五))