在开发和校招笔试中,字符串是常客,比如:
字符串转整形数字、字符串相加。String、StringBuff、StringBulider
目录
一、常用方法
-
字符串的构造
//字符串的构造常用有以下三种方式 public class ConstructString { public static void main(String[] args) { //使用常量串构造 String s1="hello bit"; System.out.println(s1); //直接newString对象(通过构造方法) String s2=new String("hello"); System.out.println(s2); //使用字符数组进行构造 char[] array={'H','e','l','l','o'}; String s3=new String(array); System.out.println(s3);//Hello } }
注意:Sting是引用类型,内部并不存储字符串本身,在string类的实现源码中,String类实例变量如下;
在java中""引起来的也是String类型对象
System.out.println("hello".length);
使用以下例子说明:
String s1=new String("hello");//获取字符串的长度--输出5
String s2=new String("world");
String s3=s1;
System.out.println(s1.length());
System.out.println(s2.length());
System.out.println(s1.isEmpty());//如果字符串长度为0,返回true,否则返回false
2.String对象的比较
- ==比较是否引用同一个对象
注意:对于内置类型,==比较的是变量中的值;对于引用类型==比较的是引用中的地址。
public static
void
main
(
String
[]
args
) {
int
a
=
10
;
int
b
=
20
;
int
c
=
10
;
//
对于基本类型变量,
==
比较两个变量中存储的值是否相同
System
.
out
.
println
(
a
==
b
);
// false
System
.
out
.
println
(
a
==
c
);
// true
//
对于引用类型变量,
==
比较两个引用变量引用的是否为同一个对象
String
s1
=
new
String
(
"hello"
);
String
s2
=
new
String
(
"hello"
);
String
s3
=
new
String
(
"world"
);
String
s4
=
s1
;
System
.
out
.
println
(
s1
==
s2
);
// false
System
.
out
.
println
(
s2
==
s3
);
// false
System
.
out
.
println
(
s1
==
s4
);
// true
}
2.
boolean equals(Object anObject)
方法:按照字典序比较
字典序:字符大小的顺序
String
类重写了父类
Object
中
equals
方法,
Object
中
equals
默认按照
==
比较,
String
重写
equals
方法后,按照
如下规则进行比较,比如:
s1.equals(s2)
public
boolean
equals
(
Object
anObject
) {
// 1.
先检测
this
和
anObject
是否为同一个对象比较,如果是返回
true
if
(
this
==
anObject
) {
return
true
;
}
// 2.
检测
anObject
是否为
String
类型的对象,如果是继续比较,否则返回
false
if
(
anObject
instanceof
String
) {
//
将
anObject
向下转型为
String
类型对象
String
anotherString
=
(
String
)
anObject
;
int
n
=
value
.
length
;
// 3. this
和
anObject
两个字符串的长度是否相同,是继续比较,否则返回
false
if
(
n
==
anotherString
.
value
.
length
) {
char
v1
[]
=
value
;
char
v2
[]
=
anotherString
.
value
;
int
i
=
0
;
// 4.
按照字典序,从前往后逐个字符进行比较
while
(
n
-- !=
0
) {
if
(
v1
[
i
]
!=
v2
[
i
])
return
false
;
i
++
;
}
return
true
;
}
}
return
false
;
}
注意;equals是区分大小写的比较![]()
3.
int compareTo(String s)
方法
:
按照字典序进行比较
与 equals 不同的是, equals 返回的是 boolean 类型,而 compareTo 返回的是 int 类型。具体比较方式:1. 先按照字典次序大小比较,如果出现不等的字符,直接返回这两个字符的大小差值2. 如果前 k 个字符相等 (k 为两个字符长度最小值 ) ,返回值两个字符串长度差值3.int compareToIgnoreCase(String str) 方法:与compareTo方式相同,但是忽略大小写比较
public static
void
main
(
String
[]
args
) {
String
s1
=
new
String
(
"abc"
);
String
s2
=
new
String
(
"ac"
);
String
s3
=
new
String
(
"abc"
);
String
s4
=
new
String
(
"abcdef"
);
System
.
out
.
println
(
s1
.
compareTo
(
s2
));
//
不同输出字符差值
-1
System
.
out
.
println
(
s1
.
compareTo
(
s3
));
//
相同输出
0
System
.
out
.
println
(
s1
.
compareTo
(
s4
));
//
前
k
个字符完全相同,输出长度差值
-3
3.字符串的查找
public static
void
main
(
String
[]
args
) {
String
s
=
"aaabbbcccaaabbbccc"
;
System
.
out
.
println
(
s
.
charAt
(
3
));
// 'b'
System
.
out
.
println
(
s
.
indexOf
(
'c'
));
// 6
System
.
out
.
println
(
s
.
indexOf
(
'c'
,
10
));
// 15
System
.
out
.
println
(
s
.
indexOf
(
"bbb"
));
// 3
System
.
out
.
println
(
s
.
indexOf
(
"bbb"
,
10
));
// 12
System
.
out
.
println
(
s
.
lastIndexOf
(
'c'
));
// 17
System
.
out
.
println
(
s
.
lastIndexOf
(
'c'
,
10
));
// 8
System
.
out
.
println
(
s
.
lastIndexOf
(
"bbb"
));
// 12
System
.
out
.
println
(
s
.
lastIndexOf
(
"bbb"
,
10
));
// 3
4.转化
- 数值和和字符串的转化(其他类型转为字符串类型,调用valueof方法)
public class ConstructString {
public static void main(String[] args) {
//数值转为字符串
String s1=String.valueOf(1234);
String s2=String.valueOf(12.34);
String s3=String.valueOf(true);
String s4=String.valueOf(new Student("Haomeimei",18));
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);//true
System.out.println(s4);//superstudy.Student@1b6d3586
}
}
//
字符串转数字
//
注意:
Integer
、
Double
等是
Java
中的包装类型,这个后面会讲到
int
data1
=
Integer
.
parseInt
(
"1234"
);
double
data2
=
Double
.
parseDouble
(
"12.34"
);
System
.
out
.
println
(
data1
);
System
.
out
.
println
(
data2
);
2.
大小写转换
3.
字符串转数组
4.
格式化
2.5
字符串替换
使用一个指定的新的字符串替换掉已有的字符串数据,可用的方法如下:
System
.
out
.
println
(
s3
);
System
.
out
.
println
(
s4
);
System
.
out
.
println
(
"================================="
);
//
字符串转数字
//
注意:
Integer
、
Double
等是
Java
中的包装类型,这个后面会讲到
int
data1
=
Integer
.
parseInt
(
"1234"
);
double
data2
=
Double
.
parseDouble
(
"12.34"
);
System
.
out
.
println
(
data1
);
System
.
out
.
println
(
data2
);
}
public static
void
main
(
String
[]
args
) {
String
s1
=
"hello"
;
String
s2
=
"HELLO"
;
//
小写转大写
System
.
out
.
println
(
s1
.
toUpperCase
());
//
大写转小写
System
.
out
.
println
(
s2
.
toLowerCase
());
}
public static
void
main
(
String
[]
args
) {
String
s
=
"hello"
;
//
字符串转数组
char
[]
ch
=
s
.
toCharArray
();
for
(
int
i
=
0
;
i
<
ch
.
length
;
i
++
) {
System
.
out
.
print
(
ch
[
i
]);
}
System
.
out
.
println
();
//
数组转字符串
String
s2
=
new
String
(
ch
);
System
.
out
.
println
(
s2
);
}
public static
void
main
(
String
[]
args
) {
String
s
=
String
.
format
(
"%d-%d-%d"
,
2019
,
9
,
14
);
System
.
out
.
println
(
s
);
}
//格式化
public static
void
main
(
String
[]
args
) {
String
s
=
String
.
format
(
"%d-%d-%d"
,
2019
,
9
,
14
);
System
.
out
.
println
(
s
);
}