Java中的String类(详解)

String类的基本概念

String类的实例化方式

String类的实例化方式有两种

1. 直接赋值

public class StringDemo{
   public static void main(String args[]){
      String str="hello world!";
      System.out.println(str);
   }
}
程序执行结果:hello world!

2. 利用构造方法实例化

public class StringDemo{
   public static void main(String args[]){
     String str=new String("hello world!");
     System.out.println(str);
   }
}
程序执行结果:hello world!

关于两种方法的说明:

1.字符串常量就是String类的匿名对象

public class StringDemo{
   public static void main(String args[]){
      String str="hello";                 //str是对象名称,而"hello"是内容
      System.out.println("hello".equals(str)); //由字符串直接调用equals()函数(内容比较函数)   
   }
}
程序执行结果:true

这个程序最大的特点是直接利用字符串“hello”调用equals()方法,由于equals()方法是String类中定义的,然而类中的方法只有实例化之后才能调用。所以可以说字符串常量是String类的匿名对象。

2.String类采用的是共享设计模式,当代码中使用直接赋值定义一个String类的对象时,会将此字符串对象所使用的匿名对象入池保存,后续如果有其他String类对象使用直接赋值并设置同样内容时,将不会重新开辟新的堆内存空间,而是直接引用。

3.采用构造方法实例化对象(String s=new String(“字符串”)),会开辟两块堆内存空间,其中有一块空间将成为垃圾,并且不会自动入池,但是用户可以使用intern()方法手工入池。

4.字符串一旦定义则不可改变。

String类的常用方法

1.字符与字符串

NO.方法名称类型描述
1public String(char[]) value构造将字符数组变成String类对象
2public String(char[] value, int offset, int count)构造将部分字符数组变为String
3public char charAt(int index)普通返回指定索引对应的字符信息
4public char[] toCharArray()普通将字符串以字符数组的形式返回

取出指定索引的字符——使用charAt()方法:

public class StringDemo{
   public static void main(String args[]){
     String str="helloworld";
     System.out.println(str.charAt(0));
   }
}
程序执行结果:h

字符数组与字符串的转换:

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]+"、");
     }
   }
}
程序执行结果:h、e、l、l、o、w、o、r、l、d、

字符串转换为大写:

public class StringDemo{
   public static void main(String args[]){
      String str="hello";
      char[] data=str.toCharArray();
      for(int x=0;x<data.length;x++){
         data[x]-=32;
      }
      System.out.println(String(data));      //将全部字符数组转换为String
      System.out.println(String(data,1,2));  //将部分字符数组转换为String
   }
}
程序执行结果: HELLO
              EL

2.字节与字符串

NO.方法名称类型描述
1public String(byte[] bytes)构造将全部字节数组变成字符串
2public String(byte[] bytes, int offset, int length)构造将部分字节数组变为字符串
3public byte[] getBytes()普通将字符串变为字节数组
4public byte[] getBytes(String charsetName) throws UnsupportedEncodingException普通进行编码转换(IO操作时用到)

字符串与字节数组的转换:

public class StringDemo{
   public static void main(String args[]){
      String str="helloworld";
      byte[] data=str.getBytes();
      for(int x=0;x<data.length;x++){
         data[x]-=32;
      }
      System.out.println(String(data));      //全部转换
      System.out.println(String(data,5,5));  //部分转换
   }
}
程序执行结果:HELLWORLD
             WORLD

3.字符串比较

NO.方法名称类型描述
1public boolean equals(String anObject)普通进行相等判断,它区分大小写
2public boolean equalsIgnoreCase(String anotherString)普通进行相等判断,不区分大小写
3public int compareTo(String anotherString)普通判断两个字符串的大小(按照字符编码比较),此方法的返回值有如下三种结果:=0:表示要比较的两个字符串内容相等; >0:表示大于的结果; <0:表示小于的结果;

相等判断:

public class StringDemo{
   public static void main(String args[]){
     String str1="hello";
     String str2="Hello";
     System.out.println(str1.equals(str2));
     System.out.println(str1.equalsIgnore(str2));
     System.out.println(str1.compareTo(str2));
   }
}
程序执行结果:false
             true
             32

4.字符串查找

NO.方法名称类型描述
1public boolean contains(String s)普通判断指定的内容是否存在
2public int indexOf(String str)普通由前向后查找指定字符串的位置,如果查找到了则返回(第一个字母)位置索引,如果找不到返回-1。
3public int indexOf(String str, int fromIndex)普通由指定位置从前向后查找指定字符串的位置,找不到返回-1
4public int lastIndexOf(String str)普通由后向前查找指定字符串的位置,找不到返回-1
5public int lastIndexOf(String str, int fromIndex)普通从指定位置由后向前查找字符串的位置,找不到返回-1。
6public boolean startsWith(String prefix)普通判断是否以指定的字符串开头
7public boolean startsWith(String prefix, int toffset)普通从指定位置开始判断是否以指定的字符串开头
8public boolean endsWith(String suffix)普通判断是否以指定的字符串结尾

使用IndexOf()等功能查找:

public class StringDemo{
   public static void main(String args[]){
      String str="helloworld";
      System.out.println(str.indexOf("l"));     //返回的是第一个查找到的子字符串的位置
      System.out.println(str.indexOf("l",5));   //从第6个元素开始查找子字符串位置
      System.out.println(str.lastIndexOf("l")); //从后向前查找指定字符串的位置
      if(str.indexOf("world")!=-1){
			System.out.println("可以查询到world");
		}
   }
}
程序执行结果:2
             8
             8
             可以查询到world

contains()方法的使用、开头结尾判断:

public class StringDemo{
	public static void main(String args[]){
		String str="helloworld";
		String str3="##@@hello**";

		if(str.contains("world")){
			System.out.println("可以查询到world");
		}
		//开头、结尾判断
		System.out.println(str3.startsWith("##"));
		System.out.println(str3.startsWith("@@",2));
		System.out.println(str3.endsWith("**"));
	}
}
程序执行结果:可以查询到world
             true
             true
             true

5.字符串替换、截取

NO.方法名称类型描述
1public String replaceAll(String regex, String replacement)普通用新的内容替换掉全部旧的内容
2public String replaceFirst(String regex, String replacement)普通替换首个满足条件的内容
3public String substring(int beginIndex)普通从指定索引截取到结尾
4public String substring(int beginIndex, int endIndex)普通截取部分子字符串的数据

字符串替换:


public class StringDemo{
	public static void main(String args[]){
		String str="helloworld";
		String result1=str.replaceAll("l","_");     //全部替换
		String result2=str.replaceFirst("l","_");   //部分替换
		
		System.out.println(result1);
		System.out.println(result2);
	}
}
程序执行结果:he__oworld
             he_loworld
             

字符串截取:

public class StringDemo{
	public static void main(String args[]){
		String str="helloworld";
		String result1=str.substring(5);    //从指定索引截取到结尾
		String result2=str.sunstring(0,5);  //截取部分子字符串
		
		System.out.println(result1);
		System.out.println(result2);
	}
}
程序执行结果:world
             hello

6.字符串拆分

NO.方法名称类型描述
1public String[] split(String regex)普通按照指定的字符串进行全部拆分
2public String[] split(String regex, int limit)普通按照指定的字符串进行部分拆分,最后的数组长度就是由limit决定(如果能拆分的结果很多,数组长度才会由limit决定),即:前面拆,后面不拆

全部拆分:

public class StringDemo{
   public static void main(String args[]){
      String str="hello world nihao scdn";
      String[] data=str.split(" ");
      for(int x=0;x<data.length;x++){
         System.out.println(data[x]+"、");
      }
   }
}
程序执行结果:hello、world、nihao、csdn

指定个数拆分:

public class StringDemo{
   public static void main(String args[]){
      String str="hello world nihao scdn";
      String[] data=str.split(" ",2);
      for(int x=0;x<data.length;x++){
         System.out.println(data[x]);
      }
   }
}
程序执行结果:hello
             world nihao csdn

复杂拆分:

public class StringDemo{
   public static void main(String args[]){
      String str="戴风:20|沈哲:21|韩商言:22";
      String[] data=str.split("\\|");       //正则表达式影响,使用\\进行转义
      for(int x=0;x<data.length;x++){
          String[] temp=data[x].split(":");
          System.out.println("姓名:"+temp[0]+",年龄:"+temp[1]);
      }
   }
}
程序运行结果:姓名:戴风,年龄:20
             姓名:沈哲,年龄:21
             姓名:韩商言,年龄:22

7.String类中的其他方法

NO.方法名称类型描述
1public String concat(String str)普通字符串连接,与“+”类似
2public String toLowerCase()普通转小写
3public String toUpperCase()普通转大写
4public String trim()普通去掉字符串中左右两表的空格,中间空格保留
5public int length()普通取得字符串的长度
6public String intern()普通数据入池
7public boolean isEmpty()普通判断是否是空字符串(不是null,而是"",长度0)

关于这些其他方法我就不再多做解释,举一例子说明。

举例:

public class StringDemo{
   public static void main(String args[]){
     String str="  HEl lo  ";
     System.out.println(str.toLowerCase());  //转小写
     System.out.println(str.toUpperCase());  //转大写
     System.out.println("["+str+"]");                //原字符串
     System.out.println("["+str.trim()+"]");         //去掉空格的字符串
     System.out.println("字符串的长度为:"+str.length());
   }
}
程序运行结果:   hel lo
                HEL LO
             [  HEl lo  ]    
             [HEl lo]   
             字符串的长度为:10

以上内容为自己学习过程中的一些见解,欢迎大家留言指正,如果这些内容对你有所帮助请添加关注,后续还有其他内容奉上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值