2021-01-29

字符串(Java自我进阶笔记四)

一级目录

二级目录

三级目录

一 String 类

1声明字符串

在Java语言中字符串必须包含在一对双引号“ ”之内
例如:

“2323”, “ABDG” ,“我爱java”

利用String来声明字符串,

String str;

String :指定该变量为字符串类型,是一个标识符。
str :字符串名称(可任意修改的名称)
声明实例:

String s1;

2 创建字符串

1 String (char())

用一个字符数组a在创建String 对象

char a[]={'m','o','n','e','y'};
String s=new String (a);

上面的实例等价于

String s=new String ("money");

2 String (char a[] ,int offset,int length )

提取字符数组a的一部分创建字符串对象

实例

char a[]={'s','t','u','d','e','n','t'};
String s=new String(a,2,4);

等价于

String s=new String ("upen");

2是开始提取的位置,数组a下标为2的是u,提取长度为4,提取依次4个,结果为upen。

3 String (char [] value)

分配一个String 对象,使得其表示字符数组的参数中所有元素连接的结果

实例

char a[]={'s','t','u','d','e','n','t'};
String s=new String (a);

等价于

String s=new String ("student");

4 直接法

可以通过字符串常量的引用直接赋值给一个字符串变量

实例

String str1,str2;
str1="I love Java";
str2="I love Java";

注意 str1 和 str2 引用的是相同的字符串常量,所有它们的内存是相同的。

二 字符串的连接

1字符串间的连接

“+”运算可以实现多个字符串的连接
package String1;
import java.io.*;
public class Join {
	public static void main(String args[]) {
		String s1=new String("loss of hair");
		String s2=new String("become the strong");
		String s=s1+"="+s2;
		System.out.println(s);
		
	}

}

注意:

Java中一句相连的字符串不能分开在两行写。比如,下列语句的写法便是错误的
System.out.println("I don't like 
Java");
如果一个字符串过长为了美观需要分两行写,可以把这个字符串分成两个字符串,
用+号连接
上面的例子可以写成下面的样子
    System.out.println("I don't like"+
"Java");

2 字符串和非字符串连接

字符串和其它数据类型连接时,会将这些非字符串类型直接转换为字符串类型。
package String1;
import java.io.*;
public class Link {
	public static void main(String args[])
	{
		int sleeptime=8;
		float studytime=4.0f;
		System.out.println("我每天睡"+sleeptime+"小时"+",花费"+studytime+"小时学习Java");
		
	}

}

三 获取字符串信息

1 获取字符串长度

使用String类中的length()方法来获取生成的字符串对象的长度。

语法如下

str.length();

实例如下

String s1="I can become strong";
int size=str.length(s1);

2字符串查找

String 类提供了两种查找字符串的方法,即 indexOf()与lastIndexOf()方法,
前者返回首次位置,后者返回最后一次出现的位置。
1 indexOf(String s)
该方法用于返回参数字符串s在指定字符串中首次出现的索引位置。如果没有检索到,
则返回值为-1.

语法如下:

str.indexOf(substr);

str : 指定的字符串对象
substr : 要搜索的字符串

实例如下:

String str="I am coming ";
int size=str.indexOf("a");//变量size的值是2

2 lastIndexOf(String s)
该方法用于返回字符串最后一次出现的索引位置,该方法会从右往左反向查找字符串。
如果没有查找到,会返回-1.

语法如下:

str.lastIndexOf(substr);

注意:如果s 是空字符串,即什么都没有。则会返回字符串的长度。

示例如下:

package String1;
import java.io.*;
public class Text {
	public static void main(String args[]) {
		String s1=new String("I want have a girf become my girffriend and "
				+ "I must make a pet of her and protected her");
		int slength=s1.length();
		int fsize=s1.indexOf("h");
		int lsize=s1.lastIndexOf("h");
		int size=s1.lastIndexOf("");
		System.out.println(slength);
		System.out.println(fsize);//h首次出现的位置
		System.out.println(lsize);//最后一次出现的位置
		System.out.println(size);//我们发现size的值和slength的值是相等的
	}

}

3 获取指定索引位置的字符

用于查找某个位置的字符

语法如下:

str.charAt(int index)

str:任意字符串
index: 整型值,你想查找的位置
实例如下:

package String1;
import java.io.*;
public class Ref {
	public static void main(String args[]) {
		char a[]= {'a','b','c','d','e','f','g','h','k','m','n','x'};
		String s1=new String(a,2,8);
		char f=s1.charAt(5);
		System.out.println(f);
	}

}

四 字符串操作

String 类中有很多方法,运行“程序猿”对字符串进行操作来满足实际编程的需求。

1 获取子字符串

使用substring方法,substring方法被重载,有两种使用形式

第一种 substring(int beginIndex)
其中beginIndex指定从某一索引处开始截取字符串,即子字符串的开始位置。
实例如下:

String s1="Hello World";//定义字符串str
String substr=str.substring(3);//获取字符串,这时substr的值为lo World

第二种substring(int beginIndex,int endIndex)
beginIndex是开始截取的位置,endIndex是结束截取的位置
示例如下:

package String1;
import java.io.*;
public class Subs {
	public static void main(String args[])
	{
		String s1="hello world";
		String substr1=s1.substring(4);//这时substr1的值为o world
		String substr2=s1.substring(2, 4);//这时substr2的值为ll
		System.out.println(substr1);
		System.out.println(substr2);
	}

}

2去除空格

trim()方法 用于出去首尾的空格
package String1;
import java.io.*;
public class Blak {
	public static void main(String args[]) {
		String str="     java     study     ";//str的值为“     java     study    ” 
		String str1=str.trim();//str1的值为java     study
		System.out.println(str);
		System.out.println(str1);
				
	}

}

3字符串替换

replace()方法实现

语法如下:

str.replace(char oldChar,char newChar);

oldChar: 被替换的字符串(被替换的字符串必须和str中必须完全对应,大小写也需要一致)
newChar: 用于替换原来内容的字符串
示例如下:

package String1;
import java.io.*;
public class ReplaceText {
	public static void main(String args[]) {
		String str="address";
		String newstr=str.replace("a", "A");//这时newstr的值为Address
		System.out.println(newstr);
	}

}

4 判断字符串的开始和结尾

starts With()方法与ends With()方法分别用于判断字符串是否以指定的内容开始
或结束,返回值都是boolean类型
1 starts With()方法
该方法用于判断当前字符串对象的前缀是否为参数指定的字符串

语法如下:

str.startsWith(String prefix);

prefix为需要判断的前缀字符串

2 endsWith()
该方法用于判断当前字符串对象的前缀是否为参数指定的字符串

语法如下:

str.endsWith(String suffix);

suffix为需要判断的后缀字符串

示例如下:

package String1;
import java.io.*;
public class StartOrEnd {
	public static void main(String args[]) {
		String s1="1243433544354";
		String s2="45545475454743";
        System.out.println("s1是否以43开头"+" :"+s1.startsWith("43"));//false
        System.out.println("s1是否以54结尾"+" :"+s1.endsWith("54"));//true
        System.out.println("s2是否以45开头"+" :"+s2.startsWith("45"));//true
        System.out.println("s2是否以43结尾"+" :"+s2.endsWith("43"));//true
		
	}

}

5判断字符串是否相等

判断字符串是否相等不能使用"==",因为比较运算符比较的两个字符串的地址是否
相同,显然,地址不同并不意味着内容不同

在Java种比较两个字符串是否相等使用equals()方法和equalsIgnoreCase方法
1 equals()方法(注意区分大小写)

语法如下:

str.equals(String otherstr);//返回值是boolean类型

str 和otherstr是要比较的两个字符串

2 equalsIgnoreCase()方法(注意不区分大小写)

语法如下:

str.equalsIgnoreCase(String otherstr);

6 按照字典顺序比较两个字符串

使用compareTo()方法基于字符的Unicode值比较。比较首个字符。若String 对象
位于参数字符串之前则返回一个负整数,若在之后则返回一个正整数,
如果相等则返回0
语法如下:
str.compareTo(String otherstr);

7 字母大小写转换

toLowerCase()方法转换为小写
语法如下:

str.toLowerCase();

toUpperCase()方法转换为大写
语法如下:

str.toUpperCase();

注意数字和非字符不受影响

8字符串分割

使用split()方法实现对字符串的分割

有两种形式
第一种 split(String sign)

该方法根据给定的分割符对字符串进行拆分

语法如下:

str.split(String sign)

sign为分割字符串的分割符,也可以使用正则表达式。
说明:没有统一的对字符进行分割的符号,如果想定义多个分割符,可使用符号|。例如,“,|=”表示分割符为“,”和“=”

第二种形式 split(String sign,int limit)

该方法根据给定的分割符对字符串进行拆分,并限定拆分的次数。

语法如下:

str.split(String sign,int limit);

sign:分割字符串的分割符,也可以使用正则表达式。
limit:模式匹配次数,如果值设置为n,那么将根据正则表达式分配n-1次,得到的数组长度不会大于n,数组的最后一项是最后匹配的分割符以后的所有内容。

实例如下:

package String1;
import java.io.*;
public class Division {
	public static void main(String args[]){
		
		String str="192.168.0.1";
		String []firstArray=str.split("\\.");//使用.进行分割,使用转义符号\\.
		String []secondArray=str.split("\\.",2);//按照.进行两次分割,使用转义符号\\.
		System.out.println("["+str+"]");//输出原来的值
		System.out.print("全部分割的结果:");
		for(String a:firstArray) {
			System.out.print("["+a+"]");
		}
		System.out.println();//换行
		System.out.print("分割变更成的结果是:");
		for(String a:secondArray) {
			System.out.print("["+a+"]");
		}
		System.out.println();
			
		
		
		
	}

}

结果显示:
[192.168.0.1]
全部分割的结果:[192][168][0][1]
分割变更成的结果是:[192][168.0.1]

五 字符串格式化

 采用String类的静态format()方法用于创建格式化的字符。有两种重载形式。

第一种 format(String format,Object…args)
语法如下:

str.format(String format,Object...args)

format 格式化字符串
args:格式字符串中由格式说明符引用的参数

第二种format(Local l,String format,Object…args)
l:格式化过程中要应用的语言环境
format:格式化字符串
args:格式字符串中由格式说明符引用的参数

1 日期和时间字符串格式化

常用的日期格式化转换符
注意:使用 “%T” 替换下面的 “%t” 可以将输出结果变成大写形式。

标识注释
%tA星期几的全名,例如 “Sunday“, “Monday“。
%ta星期几的缩写,例如 “Sun“, “Mon“。
%tB月份的全名,例如 “January“, “February“。
%tb月份的缩写,例如 “Jan“, “Feb“。
%tC年的世纪部分的格式为两位数,从 “00“到“99”。
%tc日期和时间的格式为 “%ta %tb %td %tT %tZ %tY” 如 “Fri Feb 17 07:45:42 PST 2017“。
%tD格式为 “%tm/%td/%ty“ 的日期。
%td两位的日期格式,从 “01”到 “31“。
%te没有前导0的日期,从 “1” 到 “31”。
%tF使用 “%tY-%tm-%td“ 格式的 ISO 8601 日期。
%tH24小时制的小时,从 “00” 到 “23“。
%th同 %tb。
%tI12小时制的小时,从 “01” 到 “12“。
%tj带前导0的年中的日期,从 “001” 到“366“。
%tk没有前导0的24小时制,从 “0” 到 “23“。
%tl没有前导0的12小时制,从 “1” 到“12“。
%tM带前导0的分钟,从 “00” 到“59“。
%tm带前导0的月份,从 “01” 到 “12“。
%tN带前导0的9位纳秒数,从 “000000000” to “999999999”.
%tp和区域相关的 “am” or “pm” 标记。
%tQ1970年1月1日00:00:00 UTC 以来的毫秒。
%tR24小时制的时间,如:“%tH:%tM“。
%tr12小时制的时间,如:“%tI:%tM:%tS %Tp“。
%tS2位数字格式的秒,从 “00” 到 “60”。 “60” 需要支持闰秒。
%ts1970年1月1日00:00:00 UTC以后的秒数。
%tT24小时制的时分秒,如: “%tH:%tM:%tS“。
%tY4位的年份格式,从 “0000” 到 “9999“。
%ty2位的年份格式,从 “00” 到 “99“。
%tZ时区缩写,如:“UTC“, “PST“。
%tz与GMT的时区偏移量,如 -0800。

3 常规类型格式化

说明符适用于输出
%a浮点数 (除了BigDecimal)浮点数的十六进制输出
%b任何类型如果为非空则为“true”,为空则为“false”
%c字符Unicode字符
%d证书(包括byte, short, int, long, bigint)十进制整数
%e浮点数科学计数的十进制数
%f浮点数十进制数
%g浮点数十进制数,根据值和精度可能以科学计数法显示
%h任何类型通过hashCode()方法输出的16进制数
%n平台相关的换行符
%o整数(包括byte, short, int, long, bigint)八进制数
%s任何类型字符串
%t日期/时间 (包含long, Calendar, Date 和TemporalAccessor) %t是日期/时间转换的前缀。后面还需要跟其他的标识,请参考下面的日期/时间转换。
%x整数(包含byte, short, int, long, bigint)十六进制字符串

距离如下:
例一:

package String1;
import java.io.*;
import java.util.Date;
public class Eval {
	public static void main(String ars[]) {
		Date date=new Date();
		String year=String.format("%tY", date);
		String month=String.format("%tB", date);
		String day=String.format("%td", date);
		System.out.println("今年是:"+year+"年");//年份
		System.out.println("现在是:"+month+"月");//月份
		System.out.println("今天是:"+day+"日");//日
		
		
	}

}

例二:

package String1;
import java.io.*;
import java.util.Date;
public class GetDate {
	public static void main(String args[]) {
		Date date=new Date();
		String hour=String.format("%tH", date);
		String minue=String.format("%tM", date);
		String second=String.format("%tS", date);
		System.out.println("现在是:"+hour+"时"+minue+"分"+second+"秒");
		
	}
	

}

例三:

package String1;
import java.io.*;
import java.util.Date;
public class DateAndTime {
	public static void main(String args[])
	{
		Date date=new Date();
		String time=String.format("%tc", date);
		String form=String.format("%tF", date);
		System.out.println("全部的时间信息是"+time);
		System.out.println("年-月-日格式:"+form);
	}

}

[012345]匹配数字0到5中的任意一个。
[0-5]匹配数字0到5中的任意一个。
<H[123456]>匹配HTML标签中的H1到H6。
[Jj]ack匹配字符串Jack或jack。
[a-z]匹配任何小写字母
[A-Z]匹配任意大写字母。
[-a]匹配-或者a。如果要在字符类中包含连字符,则必须包含在第一位
[^abc]匹配除了abc以外的任意字符
[^-]匹配除了连字符以外的任意字符
a[^b]匹配a之后不是b的字符串。
常用字符类
\w匹配单词字符(包括字母、数字、下划线和汉字)
\W匹配任意的非单词字符(包括字母、数字、下划线和汉字)
\s匹配任意的空白字符,如空格、制表符、换行符、中文全角空格等
\S匹配任意的非空白字符
\d匹配任意数字
\D匹配任意的非数字字符
\B匹配不是单词开头或结束的位置
[abc]匹配字符集中的任何字符
[^abc]匹配除了字符集中包含字符的任意字符
[0-9a-z_A-Z_]匹配任何数字、字母、下划线。等同于\w
\p{name}匹配{name}指定的命名字符类中的任何字符
\P{name}匹配除了{name}指定的命名字符类中之外的任何字符
.匹配除了换行符号之外的任意字符
[^0-9a-zA-Z_]等同于\W
限定修饰符
*匹配前面的子表达式零次或多次。
+匹配前面的子表达式一次或多次。
?匹配前面的子表达式零次或一次。
{n}n是一个非负整数。匹配确定的 n 次。
{n,}n 是一个非负整数。至少匹配n 次。
{n,m}m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。
*?尽可能少的使用重复的第一个匹配
+?尽可能少的使用重复但至少使用一次
??如果有可能使用零次重复或一次重复。
{n}?等同于{n}
{n,}?尽可能少的使用重复但至少重复n次
{n,m}?介于n次和m次之间,尽可能少的使用重复。

示例如下:

package String1;
import java.io.*;
public class Judge {
	public static void main(String args[]) {//定义匹配E-mail地址的正则表达式
		String regex="\\w+@\\w+(\\.\\w{2,3})*\\.\\w{2,3}";
		String str1="aaa@";//定义要验证的字符串
		String str2="aaaaa";
		String str3="1111@111ffyu.dfg.com";
		if(str1.matches(regex)) {
			System.out.println(str1+"是一个合法的E-mail地址格式");
		}
		if(str2.matches(regex)) {
			System.out.println(str2+"是一个合法的E-mail地址格式");
		}
		if(str3.matches(regex)) {
			System.out.println(str3+"是一个合法的E-mail地址格式");
		}
		
		
	}

}

结果为
1111@111ffyu.dfg.com是一个合法的E-mail地址格式

六 字符串生成器

创建成功的字符串对象,其长度是固定的,内容不能被改变和编译。使用+虽然可以达到附加新字符
串或字符串的目的,但是+会产生一个新的String实例,后来新增的的String-Builder类可以进行
字符串的修改,解决了这个问题

StringBuild 类

1 append()方法

向字符串追加内容
语法如下:

append(contend);

contend 是要新加的内容

2 insert(int offset arg)方法

该方法用于向字符串生成器中指定位置加入数据内容
语法如下:

insert(int offset arg);

offset:字符串生成器的位置必须大于0 且要小于等于该字符串长度
arg:要插入的内容
示例如下:

StringBuild bf=newStringBuilder("hello");
bf.insert(5,"world");
System.out.println(bf.toString());

3 delete(int start,int end)方法

移除此序列的一部分子序列

语法如下:

delete(int start,int end);

start:将要删除的字符串的起点
end:将要删除的字符串的终点

示例如下:

StringBuild bf=new StringBuild("StringBuild");
bf.delete(5,10);
System.out.println(bf.toString());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值