8000 部分知识内容修改 · amgm-coder/toBeTopJavaer@a4282f9 · GitHub
[go: up one dir, main page]

Skip to content

Commit a4282f9

Browse files
author
hollis.zhl
committed
部分知识内容修改
1 parent 88a1cea commit a4282f9

File tree

7 files changed

+322
-214
lines changed

7 files changed

+322
-214
lines changed

docs/_sidebar.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@
7373
* [String对“+”的重载](/basics/java-basic/string-append.md)
7474

7575
* [字符串拼接的几种方式和区别](/basics/java-basic/string-concat.md)
76+
77+
* [Java 8中的StringJoiner](/basics/java-basic/stringjoiner-in-java8.md)
7678

7779
* [String.valueOf和Integer.toString的区别](/basics/java-basic/value-of-vs-to-string.md)
7880

docs/basics/java-basic/integer-scope.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,11 @@ Java中的整型主要包含byte、short、int和long这四种,表示的数字
33
先来个简单的科普,1字节=8位(bit)。java中的整型属于有符号数。
44

55
先来看计算中8bit可以表示的数字:
6+
67
最小值:10000000 (-128)(-2^7)
8+
79
最大值:01111111(127)(2^7-1)
8-
具体计算方式参考:[Java中,为什么byte类型的取值范围为-128~127? - CSDN博客](https://blog.csdn.net/qq_23418393/article/details/57421688)
10+
911

1012
整型的这几个类型中,
1113

docs/basics/java-basic/replace-in-string.md

Lines changed: 14 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -12,72 +12,17 @@ replaceAll和replaceFirst的区别主要是替换的内容不同,replaceAll是
1212

1313
### 用法例子
1414

15-
一以下例子参考:http://www.51gjie.com/java/771.html
16-
17-
1. replaceAll() 替换符合正则的所有文字
18-
19-
```
20-
//文字替换(全部)
21-
Pattern pattern = Pattern.compile("正则表达式");
22-
Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World");
23-
//替换所有符合正则的数据
24-
System.out.println(matcher.replaceAll("Java"));
25-
26-
```
27-
28-
29-
2. replaceFirst() 替换第一个符合正则的数据
30-
31-
```
32-
//文字替换(首次出现字符)
33-
Pattern pattern = Pattern.compile("正则表达式");
34-
Matcher matcher = pattern.matcher("正则表达式 Hello World,正则表达式 Hello World");
35-
//替换第一个符合正则的数据
36-
System.out.println(matcher.replaceFirst("Java"));
37-
38-
```
39-
40-
3. replaceAll()替换所有html标签
41-
42-
```
43-
//去除html标记
44-
Pattern pattern = Pattern.compile("<.+?>", Pattern.DOTALL);
45-
Matcher matcher = pattern.matcher("<a href=\"index.html\">主页</a>");
46-
String string = matcher.replaceAll("");
47-
System.out.println(string);
48-
49-
```
50-
51-
4. replaceAll() 替换指定文字
52-
```
53-
//替换指定{}中文字
54-
String str = "Java目前的发展史是由{0}年-{1}年";
55-
String[][] object = {
56-
new String[] {
57-
"\\{0\\}",
58-
"1995"
59-
},
60-
new String[] {
61-
"\\{1\\}",
62-
"2007"
63-
}
64-
};
65-
System.out.println(replace(str, object));
66-
public static String replace(final String sourceString, Object[] object) {
67-
String temp = sourceString;
68-
for (int i = 0; i < object.length; i++) {
69-
String[] result = (String[]) object[i];
70-
Pattern pattern = Pattern.compile(result[0]);
71-
Matcher matcher = pattern.matcher(temp);
72-
temp = matcher.replaceAll(result[1]);
73-
}
74-
return temp;
75-
}
76-
77-
```
78-
79-
5. replace()替换字符串
80-
81-
```
82-
System.out.println("abac".replace("a", "\\a")); //\ab\ac
83-
```
15+
String string = "abc123adb23456aa";
16+
System.out.println(string);//abc123adb23456aa
17+
18+
//使用replace将a替换成H
19+
System.out.println(string.replace("a","H"));//Hbc123Hdb23456HH
20+
//使用replaceFirst将第一个a替换成H
21+
System.out.println(string.replaceFirst("a","H"));//Hbc123adb23456aa
22+
//使用replace将a替换成H
23+
System.out.println(string.replaceAll("a","H"));//Hbc123Hdb23456HH
24+
25+
//使用replaceFirst将第一个数字替换成H
26+
System.out.println(string.replaceFirst("\\d","H"));//abcH23adb23456aa
27+
//使用replaceFirst将所有数字替换成H
28+
System.out.println(string.replaceAll("\\d","H"));//abcHHHadbHHHHHaa
Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,29 @@
1-
1. String s = "a" + "b",编译器会进行常量折叠(因为两个都是编译期常量,编译期可知),即变成 String s = "ab"
1+
有人把Java中使用+拼接字符串的功能理解为运算符重载。其实并不是,Java是不支持运算符重载的。这其实只是Java提供的一个语法糖。
22

3-
2. 对于能够进行优化的(String s = "a" + 变量 等)用 StringBuilder 的 append() 方法替代,最后调用 toString() 方法 (底层就是一个 new String())
3+
>运算符重载:在计算机程序设计中,运算符重载(英语:operator overloading)是多态的一种。运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。
4+
5+
>语法糖:语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·兰丁发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能没有影响,但是更方便程序员使用。语法糖让程序更加简洁,有更高的可读性。
6+
7+
前面提到过,使用+拼接字符串,其实只是Java提供的一个语法糖, 那么,我们就来解一解这个语法糖,看看他的内部原理到底是如何实现的。
8+
9+
还是这样一段代码。我们把他生成的字节码进行反编译,看看结果。
10+
11+
String wechat = "Hollis";
12+
String introduce = "每日更新Java相关技术文章";
13+
String hollis = wechat + "," + introduce;
14+
15+
反编译后的内容如下,反编译工具为jad。
16+
17+
String wechat = "Hollis";
18+
String introduce = "\u6BCF\u65E5\u66F4\u65B0Java\u76F8\u5173\u6280\u672F\u6587\u7AE0";//每日更新Java相关技术文章
19+
String hollis = (new StringBuilder()).append(wechat).append(",").append(introduce).toString();
20+
21+
通过查看反编译以后的代码,我们可以发现,原来字符串常量在拼接过程中,是将String转成了StringBuilder后,使用其append方法进行处理的。
22+
23+
那么也就是说,Java中的+对字符串的拼接,其实现原理是使用StringBuilder.append。
24+
25+
但是,String的使用+字符串拼接也不全都是基于StringBuilder.append,还有种特殊情况,那就是如果是两个固定的字面量拼接,如:
26+
27+
String s = "a" + "b"
28+
29+
编译器会进行常量折叠(因为两个都是编译期常量,编译期可知),直接变成 String s = "ab"。

0 commit comments

Comments
 (0)
0