黑马程序员 java基础————string操作

 ------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
 
String类及String类的相关操作方法,
this
关键字,
static
关键字,内部类
1.String
的两种实例化方式:
 
public String(String origiral)///
可以接收一个
String
类的对象,并重新实例化
String
对象,
除了此方法之外
String
还可以采用直接赋值的方式进行对象的实例化。
 
public class StringDemo01{  
 public static void main(String args[]){  

 String str1 = "hello"  
 
 //使用直接赋值的方式完成
    String str2 = new String("MLDN")     //通过构造方法完成  
 
       System.out.println(str1 + str2)    //进行字符串的连接操作       } };  
 
    (2)String的比较方式
 
  public class StringDemo02
 
   {        public static void main(String args[])

{               
  String str1 = "hello"     //使用直接赋值的方式完成  
 String str2 = new String("hello")  //通过构造方法完成 
   String str3 = str2  //通过构造方法完成
 
  System.out.println("str1 == str2 --> " + (str1==str2))      // false  
   System.out.println("str1 == str3 --> " + (str1==str3))      // false
  System.out.println("str2 == str3 --> " + (str2==str3))      // true       } };  
 “= =”实际上比较的是两个对象的地址是否相等,具体的是比较地址的值,因为地址是以数值的形式存在的。

但是如果需要比较字符串的内容,就需要使用String类中的equals()方法完成比较:   public boolean equals(String str) 以上程序修改为str1.equals(str2) 

 (3)一个字符串实际上就是String的匿名对象  一个字符串使用" "括起来,那么一个字符串常量实际上本身就属于String的一个匿名对象

 (4)String的两种实例化方式的区别  String str1="hello"///表示在堆中开辟一个空间并将该空间地址赋值给栈中的str1  String str1=new String("hello")///表示先在堆中开辟一个字符串的匿名对象,然后在用new开辟一片新的空间,并将原对象值赋值给新的空间中,并将新开辟的空间地址赋值给栈内的str1,而原来的匿名对象所在空间为垃圾空间

public class StringDemo05

{        public static void main(String args[])

{               String str1 = "hello"     //使用直接赋值的方式完成            

  String str2 = "hello"     //使用直接赋值的方式完成             

String str3 = "hello"     //使用直接赋值的方式完成             

 System.out.println("str1 == str2 --> " + (str1==str2))            

   System.out.println("str2 == str3 --> " + (str2==str3))              

 System.out.println("str1 == str3 --> " + (str1==str3))       

 } }; 

结构输出的都是true,表示的是同一个空间引用,因为对于String来讲使用直接赋值的方式会在字符串池中保存,如果之后再声明字符串的时候发现内容一样,则不会重新开辟空间,而是从内存池中取出数据继续使用。

 (5)字符串的内容声明后则无法修改

public class StringDemo06

{        public static void main(String args[])

{               String str = "hello" //在堆中生成一个空间,将空间地址赋值给str中             str += " world" //表示先开辟一个String的匿名对象,保存在新的空间中,然后将两String连

 

//接保存在另外的一个新的空间中,最后将新空间的地址值赋值给str,str原指向断开             

  System.out.println(str)       

 } };      

 (6)String类的常用操作方法   

char charAt(int index)//根据字符串中的索引找到指定位置的字符  

public char[] toCharArray()//将字符串变为字符数组   

public String(char[] value)//将全部的字符数组变为String类型 

public String(char[] value,int offest,int count )//将数组中的offest起始位置开始,长度为count的字符转换为数组   

String concat(String str)//字符串的链接也可以用+号连接 (7)将字符串与字节数组   

 public byt[] getBytes()//将字符串变为字节数组   

public String(byte[] bytes)//将字节数组全部变为字符串   

public String(byte[] bytes,int offset ,int length)//将字节数组的offset开始,长度为length变为字符串  

 

(8)判断是否以指定的字符串开头或结尾 

public boolean startsWith(String prefix)//判断是否指定的字符串开头

public boolean endsWith(String suffix)//判断是否以指定的字符串结尾

(9)替换操作 

public String replaceAll(String regex,String replacement)//将字符串中的regex采用replacement替换 

 

 (10)字符串截取  public String substring(int beginIndex)//从beginIndex开始全部截取  public String substring(int beginIndex,int endIndex)//从beginIndex开始到endIndex进行截取

(11)字符串拆分  public String[] split(String regex)//按照字符串regex拆分成字符串数组,如果两个引号见什么都不写则全部拆分

 (12)字符串查找  public int indexOf(String str)//查找指定字符串的位置,如果查找不到返回-1,查找到返回0      if(str.indexOf(str2)!=-1)//返回的值不等于-1则查找到   public int indexOf(String str,int fromIndex )//从fromIndex开始查找str的位置 public boolean contains(String s)//查找指定的字符串,返回值我true或false

(13)字符串的其他操作  public String trim()//去掉左右空格

public int length()//取得字符串长度 

public String toUpperCase()//转换成大写

public String toLowerCase()//转换成小写  引用,this指针,对象比较  (1)引用传递  注意画出内存分析图。

例子:  class Person

{        private String name       

 private int age;       

private Book book       //一个人有一本书   

private Person child;//一个人有一个孩子      

 public Person(String n,int a)

{              this.setName(n)               this.setAge(a)       }      

  public void setBook(Book b)

{              book = b        }     

   public void setName(String n)

{              name = n        }    

    public void setAge(int a)

{              age = a        }       

 public Book getBook()

{              return book        }      

  public String getName()

{              return name        }       

 public int getAge(){              return age        } }; 

 class Book{       

 private String title       

 private float price       

  private Person person 一本书属于一个人,      

public Book(String t,float p)

{              this.setTitle(t)               this.setPrice(p)        }       

public void setPerson(Person p

){              person = p        }      

  public void setTitle(String t)

{              title = t        }      

  public void setPrice(float p)

{              price = p        }       

public Person getPerson()

{              return person        }      

  public String getTitle()

{              return title        }       

 public float getPrice(){              return price        } };   

 public class RefDemo04

{        public static void main(String args[])

{               Person per = new Person("张三",30)              

Book bk = new Book("Java基础",89.0f)               

 per.setBook(bk)           //一个人有一本书            

  bk.setPerson(per)  //一本书属于一个人             

  System.out.println(per.getBook().getTitle()) ;     //由人找到其所拥有书的名字              

 System.out.println(bk.getPerson().getName())   //由书找到人的名字       } }; 

 为了表示两个不同类的对象之间的联系,则可以在两个类中分别加入类的对象,并为它设置值。   

 

 (2)this关键字  this可以调用类中的属性:

this.属性; 可以调用类中的方法:this.方法(); 可以调用类中的构造方法:this();

 还可以表示当前对象:

this class Person

{        private String name        private int age;       public Person()

{               System.out.println("新的对象产生了。")        }  

      public Person(String name){               this()     //调用无参构造            

  this.name = name        }        public Person(String name,int age)

{               this(name)    //调用有一个参数的构造方法              this.age = age        }   

     public void setName(String name){              this.name = name        }       

 public void setAge(int age){              this.age = age        }       

public String getName(){             return this.name        }   

     public int getAge(){              return this.age        } }; 

public class ThisDemo05{        public static void main(String args[])

{               Person per = new Person("张三",30)               

System.out.println(per.getName() + " --> " + per.getAge())        } }; 

 

 使用this调用构造方法的时候,this语句应该放在第一句。在使用this调用构造方法的时候至少有一个构造方法是没有使用this()调用的,而此构造方法将作为调用的出口,一般这个出口都会使用无参构造完成。  

 

当前对象:正在调用类中方法的对象。  如果直接输出一个已经实例化的对象,则输出的是这个对象的地址。 this.属性表示的是当前对象的属性。

 (3)对象的比较  类中的对象能访问类中的私有属性。两个对象的比较,比较的是两个对象的属性是相等;另外如果两个对象的引用地址相同则是相等的对象。

class Person

{        private String name        private int age;      

  public Person(String name,int age)

{              this.name = name               this.age = age        }      

  public boolean compare(Person per)

{              if(this==per){ //地址相等                     return true               }            

   if(this.name.equals(per.name)&&this.age==per.age)

{                     return true               }else{                      return false               }       }   

     public String getName(){              return this.name        }     

   public int getAge()

{       return this.age}};    public class CompareDemo03

{        public static void main(String args[])

{               Person per1 = new Person("张三",30)              

Person per2 = new Person("张三",30)              

 if(per1.compare(per1))

{                      System.out.println("是同一个人!")               }       }

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值