一、StringBuilder
1.1 java.lang.StringBuilder
由于字符串的特性决定他不适合做修改操纵,为了解决这个问题Java提供了便于修改字符串的API:StringBuilder
StringBuilder提供了修改字符串的一系列常用操作:增删改插等
StringBuilder内部维护一个可变的char数组,修改速度更换,并且内存开销更小
1.2 append方法
append:将给定的内容添加的当前字符串末尾
builder.append(",forseegoodjob");
1.3 replace方法
replace(int start,int end,String str)
替换当前字符串中指定范围内的字符串为给定字符串(范围含头不含尾)
builder.replace(18, 31, “就是为了改变世界”);
1.4 delete方法
delete(int start,int end)
删除当前字符串中指定范围内的内容
builder.delete(0, 17);
1.5 insert方法
insert(int index,String str)
将给定的字符串插入到指定位置
builder.insert(0, “活着”);
1.6 toString方法
String toString()
该方法可以获取StringBuilder内部表示的修改后的字符串
str = builder.toString();
二、正则表达式(只关注格式正确)
正则表达式的作用是检验某个字符串的内容是否符合格式要求
2.1基本语法
-
[ ]:方括号表示一个字符,该字符只允许[]中指定的字符。
-
例如:
-
[abc]:这个字符只能是a b c 中的一个
[a-z]:“-”表示范围,意思是[abcd…z],表示任意一个小写字母 -
预定义字符:
-
.:“."在正则表达式中表示任意一个字符,内容无限制
-
\d:表示任意一数字,等同[0-9]
-
\s:表示任意一空白字符,不如:空格、缩进、回车都是空百字符
-
\w:表示任意一个单词字符,等同于[a-zA-Z0-9]
-
\D,\S,\W这三个大写字母的表达“非”,\d,\s,\w对立
-
量词:
-
?:"?"表示前面的的内容出现0次或1次
-
例如:
-
[abc]?:可以匹配单个a,单个b,单个c,或者什么都不写,但aa不可以
-
**:“*”表示前面的内容出现0~多次(任意次)
-
例如:
-
[abc]*:可以匹配:aaa,bbb,ccc,abcabcbca,什么都不写
-
不可以匹配的:abcd,ddd,ff 因为单独看每一个字符时,出现[abc]没的
-
+:“+”表示前面的内容出现1到多次(一次以上)
-
例如:
-
[abc]+:可以匹配aaa,bbb,ccc,ababc
-
不可匹配:abcd,dddd,fff,什么都不写
-
{n}:n表示一个具体数据(>=0),表示前面的数据只能出现n次
-
例如:
-
[abc]{3}:可匹配aaa,bbb,ccc,abc,acb
-
不可匹配:aaaa,aa,acd
-
{n,m}:最少n次,最多m次
-
例如[abc]{4,8}:可匹配aaaa,bbbbb,abcabc
-
不可匹配:aa,aaaaaaaaaaaaaaaaaaaaaaaaaa
-
{n,}:表示最少n次
-
例如[asd]{3,}:可匹配aaaa,sda,asdasdas
-
不可匹配:as,zxczxzxc
-
分组:
-
():将()当中的内容看成一个整体
-
例如:
-
(abc){3}:可以匹配abcabcabc
-
(abc|def){3}:可以匹配:abcabcabc,abcabcdef,defdefdef,abcdefabc
2.2 matches方法
boolean matches(String regex)
用给定的正则表达式验证当前字符串是否符合格式要求,匹配通过则返回ture
boolean match1 = qemail.matches(regex1);
注:正则表达式中经常会使用“\”转义符,如果出现,那么在Java字符串中表示该正则表达式时,所有的“\”都要写成“\”
2.3 replaceAll方法
String replaceAll(String regex,String str)
将当前字符串中满足正则表达式的部分替换为给定内容,并将其替换
str = str.replaceAll("[0-9]+","#NUMBER#");
2.4 split方法
String [ ] split(String regex)
将当前字符串按照满足正则表达式的部分进行拆分将拆分后的各部分以一个数组的形式返回
String str = “abc123def456ghi”;
//将当前字符串按照数字部分进行拆分
String[] arr=str.split("[0-9]+");
三、object
3.1 object
Object是所有类的超类,里面定义的所有方法子类都具备,其中有两个方法经常被重写
3.2 toString方法
我们经常使用该方法将一个引用类型变量输出,而这个方法是先调用给定的对象的toString方法,然后将该方法返回的String输出到控制台;由于toString方法是object定义的方法,因此所有类都有这个方法,如果子类没有重写的话,那么object提供的toString方法返回的字符串是:类名@地址
但是这个格式输出到控制台对我们开发实质上没有多大帮助,因此,当我们将来希望输出一个对象更有价值的内容时,就需要重写这个方法
注释:重写从object中继承的toString方法,返回的字符串没有格式上的具体要求,可以结合将来实际开发需求而定,但是原则上返回的字符串中应当包含当前对象的属性信息
字符串与其他类型连接的结果还是字符串那么字符串实际连接其他引用类型时,就是调用该对象的toString方法,将返回的字符串进行连接。
* 下面的字符串等同:
* String str = “point:”+p.toString();
* String str = “point:” + p ;
关于重写toString:
先定义属性然后
最后重写toString方法,返回自己想要的结果
3.3 equals方法
java提供的类equals方法基本都重写了,比如String类而我们定义的类若不重写则使用object提供的,那么其比较的规则就是==,没有实际价值,对此我们如果自己定义的类希望用 equals比较内容就需要重写这个方法
练习
String str = "goodgoodstudyjava";
//默认表示一个空字符串
//StringBuilder builder = new StringBuilder();
//表示给定的字符串
//StringBuilder builder = new StringBuilder(str);
/*
* StringBuffer是线程安全的
* Stringbuilder不是线程安全的
*/
StringBuffer builder = new StringBuffer(str);
/*
* goodgoodstudyjava
* goodgoodstudyjava,forseegoodjob
* append:将给定的内容添加的当前字符串末尾
*/
builder.append(",forseegoodjob");
/*
* String toString()
* 该方法可以获取StringBuilder内部表示的修改后的字符串
*/
str = builder.toString();
System.out.println(str);
/*goodgoodstudyjava
* goodgoodstudyjava,forseegoodjob
* goodgoodstudyjava,就是为了改变世界
* replace(int start,int end,String str)
* 替换当前字符串中指定范围内的字符串为给定字符串(范围含头不含尾)
*/
builder.replace(18, 31, "就是为了改变世界");
str = builder.toString();
System.out.println(str);
/*
* goodgoodstudyjava,就是为了改变世界
* ,就是为了改变世界
* delete(int start,int end)
* 删除当前字符串中指定范围内的内容
*/
builder.delete(0, 17);
str = builder.toString();
System.out.println(str);
/*
* ,就是为了改变世界
* 活着,就是为了改变世界
* insert(int index,String str)
* 将给定的字符串插入到指定位置
*/
builder.insert(0, "活着");
str = builder.toString();
System.out.println(str);
/*5 String s = "好好学习";
StringBuilder s1 = new StringBuilder(s);
s1.append(",天天向上");
s1.replace(5, 10, "为了改变世界");
s1.delete(0,4);
s1.insert(0,"live");
s = s1.toString();
System.out.println(s);*/
/*4 String s = "hhxx,";
StringBuilder s1 = new StringBuilder(s);
s1.append("ttxs");
s1.replace(5, 9, "wlgbsj");
s1.delete(0, 4);
s1.insert(0, "hz");
s = s1.toString();
System.out.println(s);*/
/*3 String s = "sjdyx";
StringBuilder s1 = new StringBuilder(s);
s1.append(",wlfs");
s1.replace(6,10,"wlw");
s1.delete(0, 5);
s1.insert(0, "bgz");
s = s1.toString();
System.out.println(s);*/
/*2 String s = "asasdasdasd";
StringBuilder s1 = new StringBuilder(s);
s1.append(",3121232");
s1.replace(7, 10, "!@#$$%$%");
s1.delete(0, 7);
s1.insert(0, "<>?");
s = s1.toString();
System.out.println(Arrays.toString(s));*/
/*1 String s = "12312312";
StringBuilder s1 = new StringBuilder(s);
s1.append(",asdasd");
s1.replace(0, 4, "@!#!@");
s1.delete(0, 5);
s1.insert(0, "<>?");
s = s1.toString();
System.out.println(Arrays.toString(s));
*/
String email="mg45@tedu.cn";
String regex = "[a-zA-Z0-9]+@[a-zA-z0-9]+(\\.[a-zA-z]+)+";
boolean match = email.matches(regex);
if(match){
System.out.println("是邮箱地址");
}else {
System.out.println("不是邮箱地址");
}
/*4 String qemail = "456465465@qq.com";
String regex = "[a-zA-Z0-9]+@[a-zA-Z0-9]+(\\.[a-zA-Z0-9]+";
boolean match =qemail.matches(regex);
if(match){
System.out.println("是邮箱地址");
}else{
System.out.println("不是邮箱地址");
}*/
/*3 String qemail = "78897987@qq.com.cn";
String regex1 = "\\w+@\\w+(\\.\\w)+";
boolean match1 = qemail.matches(regex1);
if(match1){
System.out.println("是邮箱地址");
}else{
System.out.println("不是邮箱地址");
}*/
/*2String qemsil = "12312asd@qq.com";
String regex = "[a-zA-Z0-9]+@[a-zA-Z0-9]+(\\.[a-zA-Z0-9]+";
boolean match = qemsil.matches(regex);
if(match){
System.out.println("是邮箱地址");
}else{
System.out.println("不是邮箱地址");
}*/
/*1String qemil = "asddas@qq.com";
String regex = "[a-zA-Z0-9]+@[a-zA-Z0-9]+(\\.[a-zA-Z0-9])";
boolean match = qemil.matches(regex);
if(match){
System.out.println("是邮箱地址");
}else{
System.out.println("不是邮箱地址");
}*/
/*5 String a = "asdas21312asddas";
a = a.replaceAll("[0-9]+", "#NUMBER#");
System.out.println(a);*/
/*4 String a = "asd123asd123sad";
a = a.replaceAll("[0-9]+", "#NUMBER#");
System.out.println(a);*/
/*3String a = "asd231asd231asd";
a = a.replaceAll("[0-9]+", "nuber");
System.out.println(a);*/
/*2 String a = "asd213asd123";
a = a.replaceAll("[0-9]+","#num#");
System.out.println(a);*/
/*1 String a = "asd213";
* a = a.replaceAll("[0-9]+","##NUM##");
* System.out.println(a);
*/
/*5 String ling = "username=张三&age=16&id=&gender=男&slary=5000";
Strin[]arr = ling.split("&");
for(int i=0;i<arr.length;i++){
String[]arr1=arr[i].split("=");
System.out.println("参数名:"+arr1[0]);
if(arr1.length==2){
System.out.println("参数值:"+arr1[1]);
}else{
System.out.println("参数值:null");
}
}*/
/*4 String ling = "username=张三&age=16&id=&gender=男&slary=5000";
String[]arr = ling.split("&");
for(int i=0;i<arr.length;i++){
String[]arr1=arr[i].split("=");
System.out.println("参数名:"+arr1[0]);
if(arr1.length==2){
System.out.println("参数值:"+arr1[1]);
}else{
System.out.println("参数值:null");
}
}*/
/*3 String ling = "username=张三&age=16&id=&gender=男&slary=5000";
String[]arr = ling.split("&");
for(int i=0;i<arr.length;i++){
String[]arr1 = arr[i].split("=");
System.out.println("参数名:"+arr1[0]);
if(arr1.length==2){
System.out.println("参数值:"+arr1[1]);
}else{
System.out.println("参数值:null");
}
}*/
/*2 String ling = "username=张三&age=16&id=&gender=男&slary=5000";
String[]arr = ling.split("&");
for(int i=0;i<arr.length;i++){
String []arr1 = arr[i].split("=");
System.out.println("参数名:"+arr1[0]);
if(arr1.length==2){
System.out.println("参数值:"+arr1[1]);
}else{
System.out.println("参数值:null");
}
}*/
/*1 String ling = "username=张三&age=16&id=&gender=男&slary=5000";
String[]arr = ling.split("&");
for(int i=0;i<arr.length;i++){
String[]arr1 = arr[i].split("=");
System.out.println("参数名:"+arr1[0]);
if(arr1.length==2){
System.out.println("参数值:"+arr1[1]);
}else{
System.out.println("参数值:null");
}
}*/
private int x;
private int y;
public Point(int x, int y) {
super();
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public String toString(){
//希望返回的格式:(x,y)
return "("+x+","+y+")";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + x;
result = prime * result + y;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Point other = (Point) obj;
if (x != other.x)
return false;
if (y != other.y)
return false;
return true;
}
/*5private int x;
private int y;
public Point(int x, int y) {
super();
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public String toString(){
//希望返回的格式:(x,y)
return "("+x+","+y+")";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + x;
result = prime * result + y;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Point other = (Point) obj;
if (x != other.x)
return false;
if (y != other.y)
return false;
return true;
}*/
/*4private int x;
private int y;
public Point(int x, int y) {
super();
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public String toString(){
//希望返回的格式:(x,y)
return "("+x+","+y+")";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + x;
result = prime * result + y;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Point other = (Point) obj;
if (x != other.x)
return false;
if (y != other.y)
return false;
return true;
}*/
/*3private int x;
private int y;
public Point(int x, int y) {
super();
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public String toString(){
//希望返回的格式:(x,y)
return "("+x+","+y+")";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + x;
result = prime * result + y;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Point other = (Point) obj;
if (x != other.x)
return false;
if (y != other.y)
return false;
return true;
}*/
/*2private int x;
private int y;
public Point(int x, int y) {
super();
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public String toString(){
//希望返回的格式:(x,y)
return "("+x+","+y+")";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + x;
result = prime * result + y;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Point other = (Point) obj;
if (x != other.x)
return false;
if (y != other.y)
return false;
return true;
}*/
/*1private int x;
private int y;
public Point(int x, int y) {
super();
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
public String toString(){
//希望返回的格式:(x,y)
return "("+x+","+y+")";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + x;
result = prime * result + y;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Point other = (Point) obj;
if (x != other.x)
return false;
if (y != other.y)
return false;
return true;
}*/
String s1 ="hello";
String s2 = new String("hello");
System.out.println(s1);
System.out.println(s2);
System.out.println("s1==s2:"+(s1==s2));
System.out.println("s1 equals s2:"+s1.equals(s2));
Point p1 = new Point(1,2);
Point p2 = new Point(1,2);
System.out.println("p1==p2:"+(p1==p2));//f
/*
* java提供的类equals方法基本都重写了,比如上面的String类
* 而我们定义的类若不重写则使用object提供的,那么其比较规则的
* 就是==,没有实际价值,对此我们如果自己定义的类也希望用
* equals比较内容就需要重写这个方法
*/
System.out.println("p1 equals p2:"+p1.equals(p2));
/*4String s1 ="hello";
String s2 = new String("hello");
System.out.println(s1);
System.out.println(s2);
System.out.println("s1==s2:"+(s1==s2));
System.out.println("s1 equals s2:"+s1.equals(s2));
Point p1 = new Point(1,2);
Point p2 = new Point(1,2);
System.out.println("p1==p2:"+(p1==p2));
System.out.println("p1 equals p2:"+p1.equals(p2));
*/
/*3String s1 ="hello";
String s2 = new String("hello");
System.out.println(s1);
System.out.println(s2);
System.out.println("s1==s2:"+(s1==s2));
System.out.println("s1 equals s2:"+s1.equals(s2));
Point p1 = new Point(1,2);
Point p2 = new Point(1,2);
System.out.println("p1==p2:"+(p1==p2));
System.out.println("p1 equals p2:"+p1.equals(p2));
*/
/*2String s1 ="hello";
String s2 = new String("hello");
System.out.println(s1);
System.out.println(s2);
System.out.println("s1==s2:"+(s1==s2));
System.out.println("s1 equals s2:"+s1.equals(s2));
Point p1 = new Point(1,2);
Point p2 = new Point(1,2);
System.out.println("p1==p2:"+(p1==p2));
System.out.println("p1 equals p2:"+p1.equals(p2));
*/
/*1String s1 ="hello";
String s2 = new String("hello");
System.out.println(s1);
System.out.println(s2);
System.out.println("s1==s2:"+(s1==s2));
System.out.println("s1 equals s2:"+s1.equals(s2));
Point p1 = new Point(1,2);
Point p2 = new Point(1,2);
System.out.println("p1==p2:"+(p1==p2));
System.out.println("p1 equals p2:"+p1.equals(p2));
*/
/*5String s1 ="hello";
String s2 = new String("hello");
System.out.println(s1);
System.out.println(s2);
System.out.println("s1==s2:"+(s1==s2));
System.out.println("s1 equals s2:"+s1.equals(s2));
Point p1 = new Point(1,2);
Point p2 = new Point(1,2);
System.out.println("p1==p2:"+(p1==p2));
System.out.println("p1 equals p2:"+p1.equals(p2));
*/