String类原来可以这么用

前言:

字符串广泛应用 在 Java 编程中,在 Java 中字符串属于对象,Java 提供了 String 类来创建和操作字符串。需要注意的是String 类是不可改变的,所以你一旦创建了 String 对象,那它的值就无法改变了

本节主要说明String类的常用方法以及如何使用:

在操作String类之前,首先要对String类进行初始化,在java中可以通过以下两种方式对String类进行初始化具体如下:

1.使用字符串常量直接初始化一个String对象:

String   str="这是一个字符串";

这是由于String类比较常用,所以提供了这种简化的语法,用于创建并初始化String对象
2.常用的String构造方法初始化字符串对象:

String(String value) 方法:根据指定字符串创建对象

String str1=new String("这是一个字符串");

String(char[] value)方法:根据指定字符数组创建对象

char[] value = {'这','是','一','个','字','符','串'};
String str2=new String(value);

String类常使用的方法:

1.equals():比较两个字符串是否相同

boolean String.equals(Object anObject);返回布尔类型

public static void main(String[] args) {
		String str1="这是一个字符串";
		String str2="第二个字符串";
		String str3="这是一个字符串";
		System.out.println(str1.equals(str3));
		System.out.println(str1.equals(str2));
		
	}

输出:

true
false

2.equalsIgnoreCase():忽略大小写后字符串是否相同

boolean equalsIgnoreCase(String anotherString);返回布尔类型

public static void main(String[] args) {
	String str1="abcdef";
	String str2="ABCdeF";
	String str3="asdasdas";
	System.out.println(str1.equalsIgnoreCase(str3));
	System.out.println(str1.equalsIgnoreCase(str2));
	
}

输出:

false
true

3.compareTo():根据字符串中每个字符的ASCII码顺序进行比较

int compareTo(Object o);
返回值是整型
如果第一个字符和参数的第一个字符不等,结束比较,返回他们之间的差值,如果第一个字符和参数的第一个字符相等,则以第二个字符和参数的第二个字符做比较,以此类推,直至比较的字符或被比较的字符有一方结束。
如果参数字符串等于此字符串,则返回值 0;
如果此字符串小于字符串参数,则返回一个小于 0 的值;
如果此字符串大于字符串参数,则返回一个大于 0 的值。

public static void main(String[] args) {
		String str1="abcdef";
		String str2="ABCdeF";
		String str3="asdasdas";
		String str4="abcdef";
		System.out.println(str1.compareTo(str3));
		System.out.println(str1.compareTo(str2));
		System.out.println(str1.compareTo(str4));
		
	}

输出:

-17
32
0

4.compareToIgnoreCase():根据字符串中每个字符的ASCII码顺序进行忽略大小写比较

int compareToIgnoreCase(Object o);返回值是整型

public static void main(String[] args) {
		String str1="abcdef";
		String str2="ABCdeF";
		String str3="asdasdas";
		String str4="abcdef";
		System.out.println(str1.compareToIgnoreCase(str3));
		System.out.println(str1.compareToIgnoreCase(str2));
		System.out.println(str1.compareToIgnoreCase(str4));
		
	}

输出:

-17
0
0

5.indexOf():目标字符或字符串在源字符串中位置下标

int indexOf(int ch )

给参数一个‘char’字符所代表的int值,然后去从前向后找到该字符在字符串中第一次出现处的索引,当然了我们不可能记得住每一个char的值所以我们在使用时直接用
String s=abcdef;  int i=s.indexOf(‘d’);
这种方式就可以了,char类型会自动提升为int类型,还有就是要注意如果返回值为 -1 ,说明字符串中没有该字符

int indexOf(int ch,int fromIndex)

这个方法就是说从指定位置往后找返回字符在该字符串中第一次出现处的索引,比如“123115611”indexOf(‘1’,2)那返回值就是3而不是1,也不是4;

indexOf(Sting str)

方法与前面类似,不同的是它是在参数里给一个子字符串,然后返回该子字符串在该字符串中第一次出现处的索引,比如"112233"要查"12"这个子字符串在整个字符串中出现的索引位置那返回值就是1

indexOf(String str,int fromIndex)

从指定位置往后找返回字该符串在字符串中第一次出现处的索引,比如“1231125611”indexOf(‘12’,2)那返回值就是4而不是0;

public class demo {
	
	public static void main(String[] args) {
		String str1="abcd";
		//98是‘b’的ASCII码值
		System.out.println("indexOf(int ch):"+str1.indexOf(98));
		System.out.println("indexOf(int ch) char类型:"+str1.indexOf('b'));
		String str2="123115611";
		System.out.println("indexOf(int ch,int fromIndex) :"+str2.indexOf('1',2));
		String str3="112233";
		System.out.println("indexOf(String str):"+str3.indexOf("12"));
		String str4="1231125611";
		System.out.println("indexOf(String str,int fromIndex):"+str4.indexOf("12",2));
		
	}
}
6.lastIndexOf():目标字符或字符串在源字符串中最后一次出现的位置下标

int lastIndexOf(int ch):

返回指定字符在此字符串中最后一次出现处的索引,
如果此字符串中没有这样的字符,则返回 -1。

int lastIndexOf(int ch, int fromIndex):

返回指定字符在此字符串中最后一次出现处的索引,
从指定的索引处开始进行反向搜索,如果此字符串中没有这样的字符,则返回 -1。

int lastIndexOf(String str):

返回指定子字符串在此字符串中最右边出现处的索引,
如果此字符串中没有这样的字符,则返回 -1。

int lastIndexOf(String str, int fromIndex):

返回指定子字符串在此字符串中最后一次出现处的索引,
从指定的索引开始反向搜索,如果此字符串中没有这样的字符,则返回 -1。

public class demo {
	
	public static void main(String[] args) {
		
		String str1="abcdefasedaaerafrasaa";
		/**
		 * int lastIndexOf(int ch): 
		 *     返回指定字符在此字符串中最后一次出现处的索引,
		 *     如果此字符串中没有这样的字符,则返回 -1。
		 */
		System.out.println("int lastIndexOf(int ch): "+str1.lastIndexOf(97));
		/**
		 * int lastIndexOf(int ch, int fromIndex): 
		 *     返回指定字符在此字符串中最后一次出现处的索引,
		 *     从指定的索引处开始进行反向搜索,如果此字符串中没有这样的字符,则返回 -1。
		 */
		System.out.println("int lastIndexOf(int ch, int fromIndex):  "+str1.lastIndexOf(97,5));
		/**
		 * int lastIndexOf(String str): 
		 *     返回指定子字符串在此字符串中最右边出现处的索引,
		 *     如果此字符串中没有这样的字符,则返回 -1。
		 */
		System.out.println("int lastIndexOf(String str):  "+str1.lastIndexOf("aa"));

		/**
		 * int lastIndexOf(String str, int fromIndex): 
		 *     返回指定子字符串在此字符串中最后一次出现处的索引,
		 *     从指定的索引开始反向搜索,如果此字符串中没有这样的字符,则返回 -1。		
		 */
		System.out.println("int lastIndexOf(String str, int fromIndex):  "+str1.lastIndexOf("aa",5));

	}
}

输出:

int lastIndexOf(int ch): 20
int lastIndexOf(int ch, int fromIndex): 0
int lastIndexOf(String str): 19
int lastIndexOf(String str, int fromIndex): -1

7.valueOf():其他类型转字符串

String.valueOf(boolean b) : 将 boolean 变量 b 转换成字符串
String.valueOf(char c) : 将 char 变量 c 转换成字符串
String.valueOf(char[] data) : 将 char 数组 data 转换成字符串
String.valueOf(char[] data, int offset, int count) : 将 char 数组 data 中 由 data[offset] 开始取 count 个元素 转换成字符串
String.valueOf(double d) : 将 double 变量 d 转换成字符串
String.valueOf(float f) : 将 float 变量 f 转换成字符串
String.valueOf(int i) : 将 int 变量 i 转换成字符串
String.valueOf(long l) : 将 long 变量 l 转换成字符串
String.valueOf(Object obj) : 将 obj 对象转换成 字符串, 等于 obj.toString()

public class demo {
	
	public static void main(String[] args) {
		System.out.println(" 将 boolean 变量转换成字符串 :"+String.valueOf(true));
		System.out.println(" 将char变量转换成字符串 :"+String.valueOf('我'));
		char[] date= {'a','b','c','d','t','s','s'};
		System.out.println(" 将 char数组 变量转换成字符串 :"+String.valueOf(date));
		System.out.println(" 将将 char数组data[offset] 开始取 count 个元素 变量转换成字符串 :"+String.valueOf(date,2,5));
		System.out.println(" 将 double变量转换成字符串 :"+String.valueOf((double)1.654));
		System.out.println(" 将 float变量转换成字符串 :"+String.valueOf((float)1.3));
		System.out.println(" 将 int 变量转换成字符串 :"+String.valueOf(10));
		System.out.println(" 将long变量转换成字符串 :"+String.valueOf((long)15));		
	}	
}

输出:

将 boolean 变量转换成字符串 :true
将char变量转换成字符串 :我
将 char数组 变量转换成字符串 :abcdtss
将将 char数组data[offset] 开始取 count 个元素 变量转换成字符串 :cdtss
将 double变量转换成字符串 :1.654
将 float变量转换成字符串 :1.3
将 int 变量转换成字符串 :10
将long变量转换成字符串 :15

8.charAt():获取指定下标位置的字符

char charAt(int index) 方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1。

public class demo {
	
	public static void main(String[] args) {
		String str ="asfdasdfas";
		
		System.out.println(str.charAt(1));
		
	}
}

输出:

s

注意数组越界:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 12
	at java.lang.String.charAt(Unknown Source)
	at com.wy.demo.demo.main(demo.java:10)
9.codePointAt():指定下标的字符的Unicode编码

int codePointAt(int index){}
返回指定索引处的字符(Unicode 代码点)。索引引用 char 值(Unicode 代码单元),其范围从 0 到 length() - 1。

public class demo {
	
	public static void main(String[] args) {
		String str ="asfdasdfas";
		
		System.out.println(str.codePointAt(0));
		
	}
}

输出;

97

10.concat():追加字符串到当前字符串

concat() 方法用于将指定的字符串参数连接到字符串上。

public class demo {
	
	public static void main(String[] args) {
		String str ="asfdasdfas";
		
		System.out.println(str.concat("我是字符串"));
		}
}

输出:

asfdasdfas我是字符串

11.isEmpty():字符串长度是否为0

isEmpty()用于判断字符串长度是否为0
注意: isEmpty完全等同于string.length()==0 如果String本身是null,那么使用string.isEmpty()会报空指针异常(NullPointerException ) 判断一个String为空的最安全的方法,还是 string ==null || string.isEmpty()

public class demo {
	
	public static void main(String[] args) {
		String str ="asfdasdfas";
		String str1="";
		String str2=null;
		System.out.println(str.isEmpty());
		System.out.println(str1.isEmpty());
		System.out.println(str2.isEmpty());		
	}
}

输出:

false
true
Exception in thread "main" java.lang.NullPointerException
	at com.wy.demo.demo.main(demo.java:13)

12.contains():是否包含目标字符串

boolean contains(String str)是否包含目标字符串

public class demo {
	
	public static void main(String[] args) {
		String str ="http://www.baidu.com";
		
		System.out.println(str.contains("baidu"));		
	}
}

输出:

true

13.startsWith():是否以目标字符串开头

boolean startsWith(String prefix, int toffset) 从指定位置查找是否以目标字符串开头
boolean startsWith(String prefix) 是否以目标字符串开头

public class demo {
	
	public static void main(String[] args) {
		String str ="http://www.baidu.com";
		
		System.out.println(str.startsWith("http:"));
		System.out.println(str.startsWith("http:",1));
	}
}

输出:

true
false

14.endsWith():是否以目标字符串结束

boolean endsWith(String suffix) 是否以目标字符串结束

public class demo {
	
	public static void main(String[] args) {
		String str ="http://www.baidu.com";
		
		System.out.println(str.endsWith("com"));
	}
}

输出:

true

15.format():格式化字符串

format()格式化字符串规则不在此作详细描述,会在我的其他文章中作专门讲解,此处,仅以时间输出格式为例:
%tx:t为时间日期类型,x代表不同的日期与时间转换符

import java.util.Date;

public class demo {
	
	public static void main(String[] args) {  
	    Date date=new Date();                                  
	    //c的使用  :c包括全部日期和时间信息
	    System.out.printf("全部日期和时间信息:%tc%n",date);          
	    //f的使用  :f"年-月-日"格式
	    System.out.printf("年-月-日格式:%tF%n",date);  
	    //d的使用  :"月/日/年/"格式
	    System.out.printf("月/日/年格式:%tD%n",date);  
	    //r的使用  :"HH:MM:SS: PM"格式
	    System.out.printf("HH:MM:SS PM格式(12时制):%tr%n",date);  
	    //t的使用  :"HH:MM:SS"格式(24小时制)
	    System.out.printf("HH:MM:SS格式(24时制):%tT%n",date);  
	    //R的使用  :"HH:MM"格式(24小时制)
	    System.out.printf("HH:MM格式(24时制):%tR",date);  
	}  
}

输出:

全部日期和时间信息:星期日 八月 23 11:47:47 CST 2020--日格式:2020-08-23//年格式:08/23/20
HH:MM:SS PM格式(12时制):11:47:47 上午
HH:MM:SS格式(24时制):11:47:47
HH:MM格式(24时制):11:47
16.getBytes():获取字符串的字节数组

byte[] getBytes()方法是得到一个操作系统默认的编码格式的字节数组。
byte[] getByte(Stringdecode) 根据指定的decode编码返回某字符串在该编码下的byte数组

相对应的可以通过new String(byte[],decode)的方式来还原字符串

public class demo {
	
	public static void main(String[] args) throws UnsupportedEncodingException {
		String str ="山";
		byte []b=str.getBytes();
		byte []a=str.getBytes("GBK");
		System.out.println(b);
		System.out.println(new String(b,"GBK"));

	}
}

输出:

[B@15db9742

17.getChars():获取字符串的指定长度字符数组

getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin)

方法将字符从字符串复制到目标字符数组。
srcBegin – 字符串中要复制的第一个字符的索引。
srcEnd – 字符串中要复制的最后一个字符之后的索引。
dst – 目标数组。
dstBegin – 目标数组中的起始偏移量。

public class demo {
	
	public static void main(String[] args)  {
		String str ="asdfghj";
		char[] a= new char[4];
		str.getChars(1, 4, a, 0);
		System.out.println(a);
	}
}

输出:

sdf

18.toCharArray():获取字符串的字符数组

char[] toCharArray() 方法将字符串转换为字符数组。

public class demo {
	
	public static void main(String[] args)  {
		String str ="asdfghj";
		System.out.println(str.toCharArray().length);
	}
}

输出:

7

19.join():以某字符串,连接某字符串数组

String.join(CharSequence delimiter, CharSequence… elements)返回一个新字符串,用给定的定界符连接所有元素。

import java.util.ArrayList;
import java.util.List;

public class demo {
	
	public static void main(String[] args)  {
		//字符串数组
		String []str = {"你好","很高兴","认识你"};
		//第二个参数是字符串数组
		String a=String.join("---",str);
		//字符串队列
		List<String> arrays=new ArrayList<String>();
		arrays.add("我");
		arrays.add("喜欢");
		arrays.add("你");
		//第二个参数是字符串集合
		String b=String.join(".....",arrays);
		//第二个参数是多个字符串
		String c=String.join("!!!!","这里","是多","个 字符串");
		System.out.println(a);
		System.out.println(b);
		System.out.println(c);
	}
}

输出:

你好—很高兴—认识你
我…喜欢…你
这里!!!是多!!!个 字符串

20.length():字符串长度

int length()字符串的长度

public class demo {
	
	public static void main(String[] args)  {
		String str="";
		String str1="asdasd";
		String str2=null;
		System.out.println(str.length());
		System.out.println(str1.length());
		System.out.println(str2.length());
	}
}

输出:
注意空指针异常

0
6
Exception in thread "main" java.lang.NullPointerException
	at com.wy.demo.demo.main(demo.java:12)
21.matches():字符串是否匹配正则表达式

boolean matches() 方法用于检测字符串是否匹配给定的正则表达式。调用此方法的 str.matches(regex) 形式与以下表达式产生的结果完全相同:

Pattern.matches(regex, str)

public class demo {
	
	public static void main(String[] args)  {
	String str="www.baidu.com";
	System.out.println(str.matches("(.*)baidu(.*)"));
	}
}

输出:

true

22.replace():字符串替换

String replace(Char oldChar,Char newChar) 方法通过用 newChar 字符替换字符串中出现的所有 oldChar 字符,并返回替换后的新字符串。

>public class demo {
	
	public static void main(String[] args)  {
	String str="www.baidu.com";
	String str1=str.replace(".", "!");
	System.out.println("oldString:"+str);
	System.out.println("newString:"+str1);
	}
}

输出:

oldString:www.baidu.com
newString:www!baidu!com

23.replaceAll():带正则字符串替换

String replaceAll(String regex, String replacement)使用给定的参数 replacement 替换字符串所有匹配给定的正则表达式的子字符串。
匹配成功返回替换后的字符串
失败返回原字符串

>public class demo {
	
	public static void main(String[] args)  {
	String str="www.baidu.com";
	System.out.println(str.replaceAll(("(.*)baidu(.*)"),"wy"));
	}
}

输出:

wy

24.replaceFirst():替换第一个出现的目标字符串

String replaceFirst(String regex,String replacement)使用给定的参数 replacement 替换字符串第一个匹配给定的正则表达式的子字符串。

public class demo {
	
	public static void main(String[] args)  {
	String str="www.baidu.com";
	System.out.println(str.replaceFirst("w", "y"));
	System.out.println(str.replaceFirst("(.*)b", "y"));
	}
}

输出:

yww.baidu.com
yaidu.com

25.split():以某正则表达式分割字符串

split():以某正则表达式分割字符串

public class demo {
	
	public static void main(String[] args)  {
	String str="www.baidu.com";
	//"."需要转义
	String[] str1=str.split("\\.");
	System.out.println(str1[0]);
	}
}

输出:

www

26.substring():截取字符串

String substring(int beginIndex)beginIndex 起始索引(包括), 索引从 0 开始。
String substring(int beginIndex, int endIndex)起始索引(包括), 索引从 0 开始,endIndex索引结束(不包括)

public class demo {
	
	public static void main(String[] args)  {
	String str="www.baidu.com";
	//"."需要转义
	String str1=str.substring(3);
	System.out.println(str1);
	String str2=str.substring(3, 5);
	System.out.println(str2);
	}
}

输出:

.baidu.com.b

27.toLowerCase():字符串转小写
public class demo {
	
	public static void main(String[] args)  {
	String str3="WWW.BAIDU.COM";
	String str1=str3.toLowerCase();
	System.out.println(str1);
	}
}

输出:

www.baidu.com

28.toUpperCase():字符串转大写
public class demo {
	
	public static void main(String[] args)  {
	String str="www.baidu.com";
	String str4=str.toUpperCase();
	System.out.println(str4);
	}
}

输出:

WWW.BAIDU.COM

29.trim():去字符串首尾空格
public class demo {
	
	public static void main(String[] args)  {
	String str="    www.baidu.com   ";
	String str4=str.trim();
	System.out.println(str4);
	}
}

输出:

www.baidu.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值