String类

String类:

描述字符串的java类就是String类,
想要对这个类进行对象的建立,有几种方式:

  1. 最简单的方法,直接用双引号来表示这个字符串。
    String str=“abc”;用双引号标识就变为字符串,变成字符串就是一个对象!
    因为String是一个类,str就是一个类类型的变量,类类型变量指向一个实体,所以"abc"是一个对象。
  2. 采用构造方法实例化的方式:
    使用构造方法实例化一定要用到new关键字,而一旦使用了new就表示要分配新的内存空间。
    String str = new String(“Hello”) ;
字符串的一些特殊的地方 :

字符串对象一旦被初始化就不会被改变。

例如:

String s="abc";
s="nba";
System.out.println("s="+s);

输出:s=nba
但并不是s值被改变。
而是因为:有两个字符串对象,s先指向"abc"再指向"nba",“abc"依然是"abc”。

String s="abc";
String s1="abc";
System.out.println(s==s1);//"=="表示地址

运行结果为“true”。
原因:字符串建立时,在内存中有一个字符串缓冲区(字符串常量池),如果没有就创建,如果有,就直接用。
第一次没有"abc",创建一个,并把"abc"的地址赋给s,
第二次有"abc",则直接把"abc"的地址赋给s1,
所以,s,s1实际上指向的是同一个"abc"。

两种方式的区别

如果是:

String s = "abc";		
String s1 = new String("abc");
System.out.println("s="+s);
System.out.println("s1="+s1);

运行结果是:
s=abc
s1=abc

但我们再看:

String s = "abc";		
String s1 = new String("abc");
System.out.println(s==s1);

它的运行结果却是:
false

原因:
String s = “abc”; 的意思是在字符串常量池中创建了一个abc字符串,并把地址赋给了s引用型变量,而String s1 = new String(“abc”);的意思是在堆内存中用new的方式创建了一个string对象,这个对象在构造时接收了一个字符串这个对象,这个动作并没有在字符串常量池中做任何事情,这个动作是在堆里创建了两个对象。所以地址是不同的。

要想比较对象是否相同,则应该:

System.out.println(s.equals(s1));

运行结果是:
true
string类中的equals复写Object中的equals建立了string类自己的判断字符串对象是否相同的依据。
其实就是比较字符串内容。

String类的匿名对象

在各个语言中并没有提供字符串的数据类型定义,很多语言都是使用字符数组来描述字符串的概念,在Java中也没有字符串的概念,只是Java自己做了简单处理。但是在Java中字符串依然不属于基本数据类型,字符串是作为String类的匿名对象的形式存在的。

字符串是匿名对象的验证:

public class StringDemo {
         public static void main(String args[]) {
                   String str = "Hello" ;
                   // 通过字符串调用方法
                   System.out.println("Hello".equals(str)) ;
         }
}

运行结果:
true

匿名对象可以调用类中的方法与属性,而以上的字符串调用了equals()方法,所以它一定是一个对象。

String常用的方法

  1. 字符串比较
public boolean equals(Object obj)		//区分大小写的比较
public boolean equalsIgnoreCase(String anotherString)	//不区分大小写的比较
public int compareTo(String anotherString)		//比较两个字符串大小关系

例如:

String str1 = "Hello";
String str2 = "hello";
System.out.println(str1.equals(str2));		//false
System.out.println(str1.equalsIgnoreCase(str2));	//true

在String类中compareTo()方法是一个非常重要的方法, 该方法返回一个整型, 该数据会根据大小关系返回三类内容:

相等: 返回0
小于: 返回内容小于0
大于: 返回内容大于0

例: compareTo()比较

System.out.println("A".compareTo("a"));//-32
System.out.println("a".compareTo("A"));//32
System.out.println("A".compareTo("A"));//0
System.out.println("AB".compareTo("AC"));//-1

compareTo()是一个可以区分大小关系的方法, 是String方法中非常重要的方法。

  1. 字符串查找
public boolean contains(CharSequence s)		//	判断一个子字符串是否存在
public int indexOf(String str)	//从头开始查找指定字符串的位置, 查到了返回位置的开始索引, 如果查不到返回-1
public int indexOf(String str, int fromIndex)		//从指定位置开始查找子字符串位置
public int lastIndexOf(String str)		//由后向前查找字符串位置
public int lastIndexOf(String str, int fromIndex)		//从指定位置由后向前查找
public boolean startsWith(String prefix)		//判断是否以指定字符串开头
public boolean startsWith(String prefix, int toffset)		//从指定位置开始判断是否以指定字符串开头
public boolean endsWith(String suffix)	//判断是否以指定字符串结尾

例子: 字符串查找最好用的就是contains() , 该方法是JDK1.5后开始追加的

String string = "helloworld";
System.out.println(string.contains("world"));//true

例:使用indexOf()方法进行位置查找

String str3 = "helloworld";
System.out.println(str3.indexOf("world"));//5
System.out.println(str3.indexOf("compute"));//-1, 没有找到
if(str3.indexOf("hello")!= -1)
{
   System.out.println("可以找到指定字符串!");
}

注意:
a. 使用indexOf(), 如果内容重复, 他只能返回查找的第一个位置;
b. 在进行查找的时候往往会判断开头或结尾;
c. 很多时候用标记做参数处理, 就要用startsWith()与endsWith()来判断

例:

String str4 = "helloworld";
System.out.println(str4.indexOf("1"));//2
System.out.println(str4.indexOf("1",5));//8
System.out.println(str4.lastIndexOf("1"));//8
String str5 = "**@@helloworld!!";
System.out.println(str5.startsWith("**"));//true
System.out.println(str5.startsWith("@@",2));//true
System.out.println(str5.endsWith("!!"));//true
  1. 字符串转换
    String(char[],num1.num2)将字符数组转换成字符串,由num1起到num2结束。
    将字符串转化成字符数组
		char[] arr=new char[10];
        String s1="abcd";
        arr=s1.toCharArray();
        System.out.println(arr.length);
  1. 字符串切割
    字符串的切割:split(“mark”);以mark为标志切割字符串。
    例:
		String s1="aba,bcd,ef";
        String[] arr=new String[10];
        arr=s1.split(",");
        for(int i=0;i<arr.length;i++)
            System.out.println(arr[i]);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值