java(11)StringBuilder 详解

摘自: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

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值