//实现一个函数,将一个字符串的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。
public class Solution {
public String replaceSpace(StringBuffer str) {
String s = str.toString();
char[] s_1 = s.toCharArray();
StringBuffer out = new StringBuffer();
for (int i = 0;i<s_1.length;i++){
if (s_1[i] == ' ')
out.append("%20");
else
out.append(s_1[i]);
}
return out.toString();
}
}

因为自己还是一个菜菜,所以编代码的过程中参考了别人的思路,多谢大神,此外,还查阅了有关String,StringBuilder和StringBuffer三者的差别,转自高人的博客,自己又手打了一遍相关内容

链接为https://www.cnblogs.com/su-feng/p/6659064.html

自己的手打:

Java中的String,StringBuilder,StringBuffer三者的区别

1. 运行速度方面

StringBuilder>StringBuffer>String

String最慢的原因:String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。

例如:

String str = “abc”;

System.out.println(str);

Str = str + “de”;

System.out.println(str);

若运行该段程序,会先输出“abc”,然后又输出“abcde”,好像是str这个对象被修改了,其实,这只是假象,JVM对于这几行,是采取先创建一个String对象str,并赋值为“abc”,然后在第三行中,JVM又创建了一个新的对象也命名为str,然后再把原来的str值和“de”加起来再赋值给新的str,而原来的str就会被JVM的垃圾回收机制(GC)回收掉,所以,str实际上并木有被修改,即String对象一旦被创建后就是不可更改的。因为Java对String对象进行操作是一个不断创建新对象并将旧对象收回的过程,故执行过程很慢。

而StringBuffer和StringBuilder的对象是变量,对变量进行操作就是直接对该对象进行修改,而不进行创建和回收的操作,所以速度要比String快很多。

有时我们对字符串进行赋值

String str = “abc” + “de”;

StringBuilder stringBuilder = new StringBuilder().append(“abc”).append(“de”);

System.out.println(str);

System.out.println(StringBuilder.toString());

这样的输出结果都为“abcde”,但是String的速度要比StringBuilder的速度快,这是应为第一行中的操作和String str = “abcde”;是等效的,所以会很快。

2. 线程安全

在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的

StringBuffer在字符串缓冲区被多个线程使用时,很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法没有关键字,所以不能保证线程安全。但是单线程时还是建议用速度比较快的StringBuilder。

总结

String:适用于少量字符串操作情况

StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况

StringBuffer:适用于多线程下在字符缓冲区进行大量操作的情况

剑指offer例题——二维数组中的查找的更多相关文章

  1. 剑指offer:二维数组中的查找

    目录 题目 解题思路 具体代码 题目 题目链接 剑指offer:二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺 ...

  2. 剑指 Offer 04. 二维数组中的查找 (思维)

    剑指 Offer 04. 二维数组中的查找 题目链接 本题的解法是从矩阵的右上角开始寻找目标值. 根据矩阵的元素分布特性, 当目标值大于当前位置的值时将row行号++,因为此时目标值一定位于当前行的下 ...

  3. 《剑指offer》 二维数组中的查找

    本题目是<剑指offer>中的题目 二维数组中的查找 题目: 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个 ...

  4. 【Java】 剑指offer(3) 二维数组中的查找

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上 ...

  5. [剑指Offer]5.二维数组中的查找

    题目 在一个二维数组中,每一行都依照从左到右递增的顺序排序,每一列都依照从上到下递增的顺序排序.请完毕一个函数,输入这种一个二维数组和一个整数.推断数组中是否含有该整数. 思路 [算法系列之三十三]杨 ...

  6. 《剑指Offer 1.二维数组中的查找》2019-03-25

    剑指Offer  第一题 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数 ...

  7. Go语言实现:【剑指offer】二维数组中的查找

    该题目来源于牛客网<剑指offer>专题. 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一 ...

  8. 【剑指offer】二维数组中的查找

    题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数.   注意点:要注意特殊 ...

  9. 剑指Offer 1. 二维数组中的查找 (数组)

    题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...

随机推荐

  1. [UE4]GameMode、GameInstance、GameState、PlayerState、PlayerController

    一.只有PlayerController和Pawn/Character才有输入事件(键盘.鼠标等等),PlayerState没有输入事件. 二.对于需要跨域关卡的数据信息,根据上图所知需要放到Game ...

  2. 5 Steps to Getting Started with SharePoint Development

    5 Steps to Getting Started with SharePoint Development Here are the steps I took to getting started ...

  3. DOM常用的属性和方法

    之前一直傻傻分不清DOM和JavaScript究竟有什么区别,随着相关工作时间的增长,开始逐渐区分DOM和JavaScript了,最近,也一直在复习有关DOM方面的知识,<JavaScript ...

  4. Oracle Service Bus (OSB) 12c 的配置安装

    Oracle Service Bus (OSB) 12c 的配置安装 1.OSB配置环境: Oracle Database Oracle Fusion Middleware Infrastructur ...

  5. swap空间不够导致安装失败解决方法

    在安装Oracle的时候,可能因为我们分配的swap空间不够导致安装失败.处理步骤如下: SWAP空间为2G [root@linux01 oracle]# free            total  ...

  6. TIDB资料收集

    https://github.com/pingcap/docs-cn https://github.com/pingcap/docs-cn/blob/master/op-guide/binary-de ...

  7. 《算法》第三章部分程序 part 2

    ▶ 书中第三章部分程序,加上自己补充的代码,平衡二叉搜索树 ● 平衡二叉搜索树 package package01; import java.util.NoSuchElementException; ...

  8. maven 插件2

    Maven is - at its heart - a plugin execution framework; all work is done by plugins. Maven 本质上就是一个插件 ...

  9. Node.js之process模块

    注意⚠️:process为nodejs内置对象,不需要实例化,改模块用来与当前进程进行互动,可以通过全局变量process访问,它是一个EventEmitter对象的实例. process对象提供一系 ...

  10. Android Netty Server

    项目源码在github上,请看这里-->Android Netty Server Android netty server Start a netty server on android Dow ...