Java的字符串
1.String类
1.1.构造方法
String的构造方法格式 |
说明 |
new String(String st) | 把字符串数据封装成字符串对象 |
new String(char[] value) | 使用一个字符数组创建字符串,…… |
new String(char[] value, int offset, int count) | 使用一个字符数组创建字符串,从字符数组中截取。起始位置offset,和count个元素 |
Java程序中,所有的字符串字面值(形如“hello”)都作为此类的实例实现。字符串是常量;创建后不可改变。
不同的构造方法,生成的字符串采用不一样的存储方式。new的对象创建于堆内存,直接赋值的对象位于“方法区的常量池”(共享)。
- 1 String s1 = new String("h");
- 2 String s2 = new String("h");
- 3 System.out.println(s1 == s2); // false
- 4
- 5 String s3 = "h";
- 6 String s4 = "h";
- 7 System.out.println(s3 == s4); // true
关于字符串池的描述:
A.字符串池位于Java内存方法区中的一块空间
B.池中绝对不会出现重复的字符串
C.直接使用双引号创建的字符串都存放在池中
D.使用new会在堆区创建一个指向方法区池的地址引用
- String str1 = "hello"; // 在池中
- String str2 = "Hello"; // 在池中
- String str3 = "hello"; // 在池中
- System.out.println(str1 == str2); //false
- System.out.println(str1 == str3); //true
- char[] arr = {'h', 'e', 'l', 'l', 'o'}; // 使用字符数组,为了创建字符串
- String str4 = new String(arr); // 不在池中
- System.out.println(str4 == str1); //false
思考:
- public static void main(String[] args) {
- String s1 = "hello";
- switchIt(s1);
- System.out.println(s1); //hello
- String s2 = new String("hello");
- switchIt(s2);
- System.out.println(s1); //hello
- } // main over
- public static void switchIt(String s){
- s = "work";
- }
1.2.String类的成员方法
String的成员方法 |
参数 |
返回 |
说明 |
|
比较 | boolean equals(Object obj) | 比较字符串的内容是否相同 | ||
boolean equalsIgnoreCase(String str) | 忽略大小写格式 | |||
boolean startsWith(String str) | 开头 | |||
boolean endsWith(String str) | 结尾 | |||
int length() | 字符长度 | |||
获取 | char charAt(int index) | 获取 字符 | ||
int indexOf(String str) | 子串 |
第一个子串的首字符索引; 没有出现返回-1。 |
获取 索引 | |
String subString(int start) | 子串开始start,直到结束 | [start,length] | 获取 子串 | |
String subString(int start, int end) | 子串开始start,子串结束end | [start,end) | 获取 某个长度的子串 | |
转换 | char[] toCharArray() | 转化为 字符数组 | ||
String toLowerCase() | 转化为 全部小写字母 | |||
String toUpperCase() | 转化为 全部大写字母 | |||
处理 | String trim() | 去掉两端的空白符 | ||
String[] split(String str) | 以str分隔为字符串数组返回 | |||
匹配 | public boolean matches(String regex) | regex,正则表达式 | 是否匹配到“正则表达式” | 匹配一个模式 字符串 |
1.2.1.字符串的内容比较方法
两个字符串变量比较时,使用了==,比较的仅仅是内存地址。内容一致,也有肯能地址不一致。
方法:equalsIgnoreCase(String str)、equals(String str)
- char[] arr = {'a', 'b', 'c'};
- String str1 = new String(arr); //生成两个内容一致的字符串
- String str2 = "abc"; //生成两个内容一致的字符串
- System.out.println(str1); //abc
- System.out.println(str2); //abc
- System.out.println("=====================");
- System.out.println(str1 == str2); //false,内容一致,却不相等
- System.out.println(str1.equals(str2)); //true,比较内容
- /*
- * == 比较对象的地址值
- * 需要比较内容时,使用equals方法
- */
注意:比较字符串变量与字符串常量时,小技巧
- String str = "abc";
- System.out.println(str.equals("abc")); //结果一致
- System.out.println("abc".equals(str)); //
- /*
- * 当程序较长时,str 为空时;
- */
- str = null;
- System.out.println("abc".equals(str)); //false
- System.out.println(str.equals("abc")); //java.lang.NullPointerException
- /*
- * 会报出一个“空指针异常”的错误
- */
1.2.2.字符串替换
replace(oldString, newString)
- String str1 = "I hate you.";
- String str2 = str1.replace("hate", "like");
1.2.3.切分
split(regex)
- String string = "hello,world";
- String[] str = string.split(",");
注意:不建议使用英文句点作为分隔符
测试下切分规律(String str = “javajfiewjavajfiowfjavagkljjava”;判断其中j、java的数量?)
- String str = "12443";
- System.out.println(str.split("2").length); //2
- System.out.println(str.split("3").length); //1 // 末尾的空字符串不算返回
- System.out.println(str.split("12443").length); //0 // 首尾为空,都不算返回
- System.out.println(str.split("124").length); //2 // 开头的空,算一个字符串
- System.out.println(str.split("4").length); //3 // 中间的空算一个字符串
(开头由截取字符串)……(结果-1)
(末尾有截取字符串)使用3分隔,得到的字符串数组只有一个元素,1244。(结果+1)
(整体为截取字符串)使用12443分隔,返回的数组为空。(结果+1)
(中间截取字符串相邻)……()
那么统计某个字符串出现的次数时,就不必去遍历某个数组了:
- public static int howMany_j(String str) {
- String[] tmp = str.split("j");
- int count_j = tmp.length;
- if (str.startsWith("j")){ // 开始为空,算返回,统计数大了,需-1
- count_j--;
- }
- if (str.endsWith("j")){ // 结尾为空,不返回,少算一个,需+1
- count_j++;
- }
- if (str.equals("j")){ // 整体匹配,两端为空,不返回,少算一个,需+1
- count_j++;
- }
- return count_j;
- }
2.StringBuilder类
2.1.构造方法
此类,用于创建一个可变的字符序列。
StringBuilder类的构造方法 |
说明 |
public StringBuilder() | 构造一个不带任何字符的字符串生成器,初始容量为16个字符。 |
public StringBuilder(String str) | 构造一个字符串生成器,初始化为指定的字符串内容 |
2.2.成员方法
StringBuilder类的成员方法 |
说明 |
public int capacity() | 返回当前容量 |
public int length() | 返回对象的当前字符序列的长度 |
public StringBuilder append(Object obj) | 参数obj将会被转换为字符串,后追加 到此序列。如果obj为null,追加四个字符null。 |
public StringBuilder reverse() | 把对象自身反转字符序列 |
public String toString() | 返回一个字符串类型 |
追加一个空字符串,结果追加的内容可是不为 空
- StringBuilder sb = new StringBuilder();
- String str = null;
- sb.append(str);
- System.out.println(sb.toString()); // null
- System.out.println(sb); // null
与追加一样,反转也是作用于自身
- System.out.println(sb); // null
- sb.reverse();
- System.out.println(sb); // llun
在 StringBuilder 上的主要操作是 append 和 insert 方法。这些方法重载,可以接受任意类型的数据。
- sb.append(3.14); // 直接添加数字
将 StringBuilder
的实例用于多个线程是不安全的。如果需要这样的同步,则建议使用 StringBuffer
。
附:ASCII表
Bin(二进制)
|
Oct(八进制) |
Dec(十进制)
|
Hex(十六进制)
|
缩写/字符
|
解释
|
0000 0000
|
0
|
0
|
00
|
NUL(null)
|
空字符
|
0000 0001
|
1
|
1
|
01
|
SOH(start of headline)
|
标题开始
|
0000 0010
|
2
|
2
|
02
|
STX (start of text)
|
正文开始
|
0000 0011
|
3
|
3
|
03
|
ETX (end of text)
|
正文结束
|
0000 0100
|
4
|
4
|
04
|
EOT (end of transmission)
|
传输结束
|
0000 0101
|
5
|
5
|
05
|
ENQ (enquiry)
|
请求
|
0000 0110
|
6
|
6
|
06
|
ACK (acknowledge)
|
收到通知
|
0000 0111
|
7
|
7
|
07
|
BEL (bell)
|
响铃
|
0000 1000
|
10
|
8
|
08
|
BS (backspace)
|
退格
|
0000 1001
|
11
|
9
|
09
|
HT (horizontal tab)
|
水平制表符
|
0000 1010
|
12
|
10
|
0A
|
LF (NL line feed, new line)
|
换行键
|
0000 1011
|
13
|
11
|
0B
|
VT (vertical tab)
|
垂直制表符
|
0000 1100
|
14
|
12
|
0C
|
FF (NP form feed, new page)
|
换页键
|
0000 1101
|
15
|
13
|
0D
|
CR (carriage return)
|
回车键
|
0000 1110
|
16
|
14
|
0E
|
SO (shift out)
|
不用切换
|
0000 1111
|
17
|
15
|
0F
|
SI (shift in)
|
启用切换
|
0001 0000
|
20
|
16
|
10
|
DLE (data link escape)
|
数据链路转义
|
0001 0001
|
21
|
17
|
11
|
DC1 (device control 1)
|
设备控制1
|
0001 0010
|
22
|
18
|
12
|
DC2 (device control 2)
|
设备控制2
|
0001 0011
|
23
|
19
|
13
|
DC3 (device control 3)
|
设备控制3
|
0001 0100
|
24
|
20
|
14
|
DC4 (device control 4)
|
设备控制4
|
0001 0101
|
25
|
21
|
15
|
NAK (negative acknowledge)
|
拒绝接收
|
0001 0110
|
26
|
22
|
16
|
SYN (synchronous idle)
|
同步空闲
|
0001 0111
|
27
|
23
|
17
|
ETB (end of trans. block)
|
结束传输块
|
0001 1000
|
30
|
24
|
18
|
CAN (cancel)
|
取消
|
0001 1001
|
31
|
25
|
19
|
EM (end of medium)
|
媒介结束
|
0001 1010
|
32
|
26
|
1A
|
SUB (substitute)
|
代替
|
0001 1011
|
33
|
27
|
1B
|
ESC (escape)
|
换码(溢出)
|
0001 1100
|
34
|
28
|
1C
|
FS (file separator)
|
文件分隔符
|
0001 1101
|
35
|
29
|
1D
|
GS (group separator)
|
分组符
|
0001 1110
|
36
|
30
|
1E
|
RS (record separator)
|
记录分隔符
|
0001 1111
|
37
|
31
|
1F
|
US (unit separator)
|
单元分隔符
|
0010 0000
|
40
|
32
|
20
|
(space)
|
空格
|
0010 0001
|
41
|
33
|
21
|
!
|
叹号 |
0010 0010
|
42
|
34
|
22
|
"
|
双引号 |
0010 0011
|
43
|
35
|
23
|
#
|
井号 |
0010 0100
|
44
|
36
|
24
|
$
|
美元符 |
0010 0101
|
45
|
37
|
25
|
%
|
百分号 |
0010 0110
|
46
|
38
|
26
|
&
|
和号 |
0010 0111
|
47
|
39
|
27
|
'
|
闭单引号 |
0010 1000
|
50
|
40
|
28
|
(
|
开括号
|
0010 1001
|
51
|
41
|
29
|
)
|
闭括号
|
0010 1010
|
52
|
42
|
2A
|
*
|
星号 |
0010 1011
|
53
|
43
|
2B
|
+
|
加号 |
0010 1100
|
54
|
44
|
2C
|
,
|
逗号 |
0010 1101
|
55
|
45
|
2D
|
-
|
减号/破折号 |
0010 1110
|
56
|
46
|
2E
|
.
|
句号 |
00101111
|
57
|
47
|
2F
|
/
|
斜杠 |
00110000
|
60
|
48
|
30
|
0
|
数字0 |
00110001
|
61
|
49
|
31
|
1
|
数字1 |
00110010
|
62
|
50
|
32
|
2
|
数字2 |
00110011
|
63
|
51
|
33
|
3
|
数字3 |
00110100
|
64
|
52
|
34
|
4
|
数字4 |
00110101
|
65
|
53
|
35
|
5
|
数字5 |
00110110
|
66
|
54
|
36
|
6
|
数字6 |
00110111
|
67
|
55
|
37
|
7
|
数字7 |
00111000
|
70
|
56
|
38
|
8
|
数字8 |
00111001
|
71
|
57
|
39
|
9
|
数字9 |
00111010
|
72
|
58
|
3A
|
:
|
冒号 |
00111011
|
73
|
59
|
3B
|
;
|
分号 |
00111100
|
74
|
60
|
3C
|
<
|
小于 |
00111101
|
75
|
61
|
3D
|
=
|
等号 |
00111110
|
76
|
62
|
3E
|
>
|
大于 |
00111111
|
77
|
63
|
3F
|
?
|
问号 |
01000000
|
100
|
64
|
40
|
@
|
电子邮件符号 |
01000001
|
101
|
65
|
41
|
A
|
大写字母A |
01000010
|
102
|
66
|
42
|
B
|
大写字母B |
01000011
|
103
|
67
|
43
|
C
|
大写字母C |
01000100
|
104
|
68
|
44
|
D
|
大写字母D |
01000101
|
105
|
69
|
45
|
E
|
大写字母E |
01000110
|
106
|
70
|
46
|
F
|
大写字母F |
01000111
|
107
|
71
|
47
|
G
|
大写字母G |
01001000
|
110
|
72
|
48
|
H
|
大写字母H |
01001001
|
111
|
73
|
49
|
I
|
大写字母I |
01001010
|
112
|
74
|
4A
|
J
|
大写字母J |
01001011
|
113
|
75
|
4B
|
K
|
大写字母K |
01001100
|
114
|
76
|
4C
|
L
|
大写字母L |
01001101
|
115
|
77
|
4D
|
M
|
大写字母M |
01001110
|
116
|
78
|
4E
|
N
|
大写字母N |
01001111
|
117
|
79
|
4F
|
O
|
大写字母O |
01010000
|
120
|
80
|
50
|
P
|
大写字母P |
01010001
|
121
|
81
|
51
|
Q
|
大写字母Q |
01010010
|
122
|
82
|
52
|
R
|
大写字母R |
01010011
|
123
|
83
|
53
|
S
|
大写字母S |
01010100
|
124
|
84
|
54
|
T
|
大写字母T |
01010101
|
125
|
85
|
55
|
U
|
大写字母U |
01010110
|
126
|
86
|
56
|
V
|
大写字母V |
01010111
|
127
|
87
|
57
|
W
|
大写字母W |
01011000
|
130
|
88
|
58
|
X
|
大写字母X |
01011001
|
131
|
89
|
59
|
Y
|
大写字母Y |
01011010
|
132
|
90
|
5A
|
Z
|
大写字母Z |
01011011
|
133
|
91
|
5B
|
[
|
开方括号 |
01011100
|
134
|
92
|
5C
|
\
|
反斜杠 |
01011101
|
135
|
93
|
5D
|
]
|
闭方括号 |
01011110
|
136
|
94
|
5E
|
^
|
脱字符 |
01011111
|
137
|
95
|
5F
|
_
|
下划线 |
01100000
|
140
|
96
|
60
|
`
|
开单引号 |
01100001
|
141
|
97
|
61
|
a
|
小写字母a |
01100010
|
142
|
98
|
62
|
b
|
小写字母b |
01100011
|
143
|
99
|
63
|
c
|
小写字母c |
01100100
|
144
|
100
|
64
|
d
|
小写字母d |
01100101
|
145
|
101
|
65
|
e
|
小写字母e |
01100110
|
146
|
102
|
66
|
f
|
小写字母f |
01100111
|
147
|
103
|
67
|
g
|
小写字母g |
01101000
|
150
|
104
|
68
|
h
|
小写字母h |
01101001
|
151
|
105
|
69
|
i
|
小写字母i |
01101010
|
152
|
106
|
6A
|
j
|
小写字母j |
01101011
|
153
|
107
|
6B
|
k
|
小写字母k |
01101100
|
154
|
108
|
6C
|
l
|
小写字母l |
01101101
|
155
|
109
|
6D
|
m
|
小写字母m |
01101110
|
156
|
110
|
6E
|
n
|
小写字母n |
01101111
|
157
|
111
|
6F
|
o
|
小写字母o |
01110000
|
160
|
112
|
70
|
p
|
小写字母p |
01110001
|
161
|
113
|
71
|
q
|
小写字母q |
01110010
|
162
|
114
|
72
|
r
|
小写字母r |
01110011
|
163
|
115
|
73
|
s
|
小写字母s |
01110100
|
164
|
116
|
74
|
t
|
小写字母t |
01110101
|
165
|
117
|
75
|
u
|
小写字母u |
01110110
|
166
|
118
|
76
|
v
|
小写字母v |
01110111
|
167
|
119
|
77
|
w
|
小写字母w |
01111000
|
170
|
120
|
78
|
x
|
小写字母x |
01111001
|
171
|
121
|
79
|
y
|
小写字母y |
01111010
|
172
|
122
|
7A
|
z
|
小写字母z |
01111011
|
173
|
123
|
7B
|
{
|
开花括号 |
01111100
|
174
|
124
|
7C
|
|
|
垂线 |
01111101
|
175
|
125
|
7D
|
}
|
闭花括号 |
01111110
|
176
|
126
|
7E
|
~
|
波浪号 |
01111111
|
177
|
127
|
7F
|
DEL (delete)
|
删除
|
Java的字符串的更多相关文章
- Java常量字符串String理解
Java常量字符串String理解 以前关于String的理解仅限于三点:1.String 是final类,不可继承2.String 类比较字符串相等时时不能用“ == ”,只能用 "eq ...
- Java String字符串/==和equals区别,str。toCharAt(),getBytes,indexOf过滤存在字符,trim()/String与StringBuffer多线程安全/StringBuilder单线程—— 14.0
课程概要 String 字符串 String字符串常用方法 StringBuffer StringBuilder String字符串: 1.实例化String对象 直接赋值 String str=& ...
- java截取字符串中的数字
java从字符串中提取数字 随便给你一个含有数字的字符串,比如: String s="eert343dfg56756dtry66fggg89dfgf"; 那我们如何把其中的数字提取 ...
- 三张图彻底了解Java中字符串的不变性
转载: 三张图彻底了解Java中字符串的不变性 定义一个字符串 String s = "abcd"; s中保存了string对象的引用.下面的箭头可以理解为"存储他的引用 ...
- java中字符串的非空判断
问题如下:在java 中 字符串为null 如何判断String str;if(str==null) ??str.equal("null") ?? 答:我觉得应该搞清楚字符串对象和 ...
- java中字符串String 转 int(转)
java中字符串String 转 int String -> int s="12345"; int i; 第一种方法:i=Integer.parseInt(s); 第二种方法 ...
- Java:字符串类String的功能介绍
在java中,字符串是一个比较常用的类,因为代码中基本上处理的很多数据都是字符串类型的,因此,掌握字符串类的具体用法显得很重要了. 它的主要功能有如下几种:获取.判断.转换.替换.切割.字串的获取.大 ...
- Java空字符串与null的区别和判断字符串是否为空的方法
Java空字符串与null的区别: 1.类型null表示的是一个对象的值,而并不是一个字符串.例如声明一个对象的引用,String a = null ;""表示的是一个空字符串,也 ...
- android112 jni 把java的字符串转换成c的字符串,数组处理
package com.itheima.charencode; import android.os.Bundle; import android.app.Activity; import androi ...
- java判断字符串是否为空的方法总结
http://blog.csdn.net/qq799499343/article/details/8492672 以下是java 判断字符串是否为空的四种方法: 方法一: 最多人使用的一个方法, 直观 ...
随机推荐
- 安装plsql developer
需求:要连接oracle数据库,不想在本地安装oracle,太大,又占内存,所以用plsql developer.. 在网上看了很多博客,妈呀,被毒的不清,一直提示初始化失败,就是那个oci,dll ...
- ML: 降维算法-LLE
局部线性嵌入 (Locally linear embedding)是一种非线性降维算法,它能够使降维后的数据较好地保持原有 流形结构 .LLE可以说是流形学习方法最经典的工作之一.很多后续的流形学习. ...
- InfluxDB v1.6.4 下载
InfluxDB v1.6.4 OS X (via Homebrew) brew update brew install influxdb Docker Image docker pull influ ...
- nginx简单学习(tomcat)
一.负载均衡的简单配置 1.下载nginx 2.tomcat*2 配置不同的端口用于正常启动,在jsp中<%= session.getId()%>可以查看jSessionId,tomcat ...
- Java使用 SFTP实现文件上传下载
package com.lijy.util; import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelSftp; import co ...
- windows下怎么生成github的ssh公钥
windows下如何生成github的ssh公钥: 1.首先你要安装Git工具 2.在C:\Documents and Settings\Administrator\目录下,运行Git Bash he ...
- Python——pandas读取JSON数据,xml,html数据(python programming)
- 学习笔记之pandas
Python Data Analysis Library — pandas: Python Data Analysis Library https://pandas.pydata.org/ panda ...
- 廖雪峰Java5集合-3Map-1使用Map
廖雪峰的视频不全,以下是疯狂Java关于Map的讲解 1.Map定义 Map是一种键值映射表,可以通过key快速查找value,同python的dict.key不允许重复,value可以重复. Map ...
- C语言强化——文件
文件操作 fopen与fclose fread与fwrite fseek fputs与fgets fscanf与fprintf fopen与fclose #include<stdio.h> ...