摘自:https://www.cnblogs.com/skywang12345/p/string02.html
-----------------------------------------------------------------------------------------------------------------------------------------------------------
1.StringBuilder 中插入(insert)相关的API
源码如下(StringBuilderInsertTest.java):
1 /**
2 * StringBuilder 的insert()示例
3 *
4 * @author skywang
5 */
6 import java.util.HashMap;
7
8 public class StringBuilderInsertTest {
9
10 public static void main(String[] args) {
11 testInsertAPIs() ;
12 }
13
14 /**
15 * StringBuilder 的insert()示例
16 */
17 private static void testInsertAPIs() {
18
19 System.out.println("-------------------------------- testInsertAPIs -------------------------------");
20
21 StringBuilder sbuilder = new StringBuilder();
22
23 // 在位置0处插入字符数组
24 sbuilder.insert(0, new char[]{'a','b','c','d','e'});
25 // 在位置0处插入字符数组。0表示字符数组起始位置,3表示长度
26 sbuilder.insert(0, new char[]{'A','B','C','D','E'}, 0, 3);
27 // 在位置0处插入float
28 sbuilder.insert(0, 1.414f);
29 // 在位置0处插入double
30 sbuilder.insert(0, 3.14159d);
31 // 在位置0处插入boolean
32 sbuilder.insert(0, true);
33 // 在位置0处插入char
34 sbuilder.insert(0, '\n');
35 // 在位置0处插入int
36 sbuilder.insert(0, 100);
37 // 在位置0处插入long
38 sbuilder.insert(0, 12345L);
39 // 在位置0处插入StringBuilder对象
40 sbuilder.insert(0, new StringBuilder("StringBuilder"));
41 // 在位置0处插入StringBuilder对象。6表示被在位置0处插入对象的起始位置(包括),13是结束位置(不包括)
42 sbuilder.insert(0, new StringBuilder("STRINGBUILDER"), 6, 13);
43 // 在位置0处插入StringBuffer对象。
44 sbuilder.insert(0, new StringBuffer("StringBuffer"));
45 // 在位置0处插入StringBuffer对象。6表示被在位置0处插入对象的起始位置(包括),12是结束位置(不包括)
46 sbuilder.insert(0, new StringBuffer("STRINGBUFFER"), 6, 12);
47 // 在位置0处插入String对象。
48 sbuilder.insert(0, "String");
49 // 在位置0处插入String对象。1表示被在位置0处插入对象的起始位置(包括),6是结束位置(不包括)
50 sbuilder.insert(0, "0123456789", 1, 6);
51 sbuilder.insert(0, '\n');
52
53 // 在位置0处插入Object对象。此处以HashMap为例
54 HashMap map = new HashMap();
55 map.put("1", "one");
56 map.put("2", "two");
57 map.put("3", "three");
58 sbuilder.insert(0, map);
59
60 System.out.printf("%s\n\n", sbuilder);
61 }
62 }
运行结果:
-------------------------------- testInsertAPIs ------------------------------- {3=three, 2=two, 1=one} 12345StringBUFFERStringBufferBUILDERStringBuilder12345100 true3.141591.414ABCabcde
2. StringBuilder 中追加(append)相关的API
源码如下(StringBuilderAppendTest.java):
1 /**
2 * StringBuilder 的append()示例
3 *
4 * @author skywang
5 */
6 import java.util.HashMap;
7
8 public class StringBuilderAppendTest {
9
10 public static void main(String[] args) {
11 testAppendAPIs() ;
12 }
13
14 /**
15 * StringBuilder 的append()示例
16 */
17 private static void testAppendAPIs() {
18
19 System.out.println("-------------------------------- testAppendAPIs -------------------------------");
20
21 StringBuilder sbuilder = new StringBuilder();
22
23 // 追加字符数组
24 sbuilder.append(new char[]{'a','b','c','d','e'});
25 // 追加字符数组。0表示字符数组起始位置,3表示长度
26 sbuilder.append(new char[]{'A','B','C','D','E'}, 0, 3);
27 // 追加float
28 sbuilder.append(1.414f);
29 // 追加double
30 sbuilder.append(3.14159d);
31 // 追加boolean
32 sbuilder.append(true);
33 // 追加char
34 sbuilder.append('\n');
35 // 追加int
36 sbuilder.append(100);
37 // 追加long
38 sbuilder.append(12345L);
39 // 追加StringBuilder对象
40 sbuilder.append(new StringBuilder("StringBuilder"));
41 // 追加StringBuilder对象。6表示被追加对象的起始位置(包括),13是结束位置(不包括)
42 sbuilder.append(new StringBuilder("STRINGBUILDER"), 6, 13);
43 // 追加StringBuffer对象。
44 sbuilder.append(new StringBuffer("StringBuffer"));
45 // 追加StringBuffer对象。6表示被追加对象的起始位置(包括),12是结束位置(不包括)
46 sbuilder.append(new StringBuffer("STRINGBUFFER"), 6, 12);
47 // 追加String对象。
48 sbuilder.append("String");
49 // 追加String对象。1表示被追加对象的起始位置(包括),6是结束位置(不包括)
50 sbuilder.append("0123456789", 1, 6);
51 sbuilder.append('\n');
52
53 // 追加Object对象。此处以HashMap为例
54 HashMap map = new HashMap();
55 map.put("1", "one");
56 map.put("2", "two");
57 map.put("3", "three");
58 sbuilder.append(map);
59 sbuilder.append('\n');
60
61 // 追加unicode编码
62 sbuilder.appendCodePoint(0x5b57); // 0x5b57是“字”的unicode编码
63 sbuilder.appendCodePoint(0x7b26); // 0x7b26是“符”的unicode编码
64 sbuilder.appendCodePoint(0x7f16); // 0x7f16是“编”的unicode编码
65 sbuilder.appendCodePoint(0x7801); // 0x7801是“码”的unicode编码
66
67 System.out.printf("%s\n\n", sbuilder);
68 }
69 }
运行结果:
-------------------------------- testAppendAPIs ------------------------------- abcdeABC1.4143.14159true 10012345StringBuilderBUILDERStringBufferBUFFERString12345 {3=three, 2=two, 1=one} 字符编码
3. StringBuilder 中替换(replace)相关的API
源码如下(StringBuilderReplaceTest.java):
1 /**
2 * StringBuilder 的replace()示例
3 *
4 * @author skywang
5 */
6 import java.util.HashMap;
7
8 public class StringBuilderReplaceTest {
9
10 public static void main(String[] args) {
11 testReplaceAPIs() ;
12 }
13
14 /**
15 * StringBuilder 的replace()示例
16 */
17 private static void testReplaceAPIs() {
18
19 System.out.println("-------------------------------- testReplaceAPIs ------------------------------");
20
21 StringBuilder sbuilder;
22
23 sbuilder = new StringBuilder("0123456789");
24 sbuilder.replace(0, 3, "ABCDE");
25 System.out.printf("sbuilder=%s\n", sbuilder);
26
27 sbuilder = new StringBuilder("0123456789");
28 sbuilder.reverse();
29 System.out.printf("sbuilder=%s\n", sbuilder);
30
31 sbuilder = new StringBuilder("0123456789");
32 sbuilder.setCharAt(0, 'M');
33 System.out.printf("sbuilder=%s\n", sbuilder);
34
35 System.out.println();
36 }
37 }
运行结果:
-------------------------------- testReplaceAPIs ------------------------------ sbuilder=ABCDE3456789 sbuilder=9876543210 sbuilder=M123456789
4. StringBuilder 中删除(delete)相关的API
源码如下(StringBuilderDeleteTest.java):
1 /**
2 * StringBuilder 的delete()示例
3 *
4 * @author skywang
5 */
6 import java.util.HashMap;
7
8 public class StringBuilderDeleteTest {
9
10 public static void main(String[] args) {
11 testDeleteAPIs() ;
12 }
13
14 /**
15 * StringBuilder 的delete()示例
16 */
17 private static void testDeleteAPIs() {
18
19 System.out.println("-------------------------------- testDeleteAPIs -------------------------------");
20
21 StringBuilder sbuilder = new StringBuilder("0123456789");
22
23 // 删除位置0的字符,剩余字符是“123456789”。
24 sbuilder.deleteCharAt(0);
25 // 删除位置3(包括)到位置6(不包括)之间的字符,剩余字符是“123789”。
26 sbuilder.delete(3,6);
27
28 // 获取sb中从位置1开始的字符串
29 String str1 = sbuilder.substring(1);
30 // 获取sb中从位置3(包括)到位置5(不包括)之间的字符串
31 String str2 = sbuilder.substring(3, 5);
32 // 获取sb中从位置3(包括)到位置5(不包括)之间的字符串,获取的对象是CharSequence对象,此处转型为String
33 String str3 = (String)sbuilder.subSequence(3, 5);
34
35 System.out.printf("sbuilder=%s\nstr1=%s\nstr2=%s\nstr3=%s\n",
36 sbuilder, str1, str2, str3);
37 }
38 }
运行结果:
-------------------------------- testDeleteAPIs ------------------------------- sbuilder=123789 str1=23789 str2=78 str3=78
-----------------------------------------------------------------------------------------------------------------------------------------------------------
例子:
题目:https://leetcode-cn.com/problems/simplify-path/description/
给定一个文档 (Unix-style) 的完全路径,请进行路径简化。
例如,
path = "/home/"
, => "/home"
path = "/a/./b/../../c/"
, => "/c"
边界情况:
- 你是否考虑了 路径 =
"/../"
的情况?
在这种情况下,你需返回"/"
。 - 此外,路径中也可能包含多个斜杠
'/'
,如"/home//foo/"
。
在这种情况下,你可忽略多余的斜杠,返回"/home/foo"
。
class Solution {
public String simplifyPath(String path) {
//通过“/”把整个String划分成不同的string。我开始想用char【】来着,因为他是以一个word整体为处理,所以要用string【】处理。
String[] Names = path.split("/");
//仍然采用栈的结构,后进先出。
//分成几种情况:
//当/./的时候,忽略点;当/a/../的时候,两个..,相当于清除之前输入的/a;当有多个//的时候也忽略
Stack<String> S = new Stack<String>();
for(int i=0;i<Names.length;++i){
if(".".equals(Names[i])||"".equals(Names[i]))//情况1和情况3
continue;
if("..".equals(Names[i]))
{//情况二
if(!S.empty())
S.pop();
}
else
S.push(Names[i]);
}
StringBuilder R = new StringBuilder();
//恢复完整的path
while(!S.empty())
{
R.insert(0,S.pop());//在0位置,插入是内容是后者
R.insert(0,"/");
}
if(R.length()==0) //append函数是追加的意思
R.append("/");
return R.toString();
}
}
参考:https://blog.csdn.net/u014115273/article/details/51337314