【问题描述】

请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

【解答思路】

  1. 找到空格
  2. 替换空格
    2.1 新建字符串,找到空格就替换,非空格添加原字符
    2.2 在原来的基础上移动位置,从后往前
public class Solution {public String replaceSpace(StringBuffer str) {StringBuffer buf = new StringBuffer();if(str==null)return str.toString();for(int i=0;i < str.length();i++) {if(str.charAt(i)!=' '){buf.append(str.charAt(i));} else{buf.append("%20");}}return buf.toString();//牛客网一定要讲StringBuffer类型转化为String类型才能通过 }
}

public class Solution {public String replaceSpace(StringBuffer str) {int spacenum = 0;//spacenum为计算空格数for(int i=0;i<str.length();i++){if(str.charAt(i)==' ')spacenum++;}int indexold = str.length()-1; //indexold为为替换前的str下标int newlength = str.length() + spacenum*2;//计算空格转换成%20之后的str长度int indexnew = newlength-1;//indexold为为把空格替换为%20后的str下标str.setLength(newlength);//使str的长度扩大到转换成%20之后的长度,防止下标越界for(;indexold>=0 && indexold<newlength;--indexold){ if(str.charAt(indexold) == ' '){  //str.setCharAt(indexnew--, '0');str.setCharAt(indexnew--, '2');str.setCharAt(indexnew--, '%');}else{str.setCharAt(indexnew--, str.charAt(indexold));}}return str.toString();}
}
使用replaceAll函数
public class Solution {public String replaceSpace(StringBuffer str) {return str.toString().replaceAll("\\s", "%20");}
}

【总结】

1.遍历字符串
String str="CryptWinter";// 方法一for(int i=0;i < str.length();i++) {System.out.println(str.charAt(i));
}//方法二for(int i=0;i < str.length();i++) {System.out.println(str.substring(i,i+1)); }//方法三char[]  c = str.toCharArray();for(int i=0;i < c.length;i++) {System.out.println(c[i]);
}
2.字符串Stringbuffer常用函数
  • 创建 StringBuffer sb = new StringBuffer ();
  • 转换字符串 toString()
  • 增加 append(String s)
  • 插入 insert (int offset, int i)
  • 指定索引 charAt(int index)
    StringBuffer 方法
3.String与StringBuffer与用StringBuilder 区别
  • String 少量数据 字符串常量,字符串长度不可变
  • StringBuffer 多线程操作大量数据 频繁对字符串内容进行修改
  • StringBuilder 单线程操作大量数据 效率比StringBuffer提高百分之十左右
    参考链接:Java String、StringBuffer 和 StringBuilder 的区别

[剑指offer]面试题第[2]题[JAVA][替换空格][函数][字符串]相关推荐

  1. [剑指offer]面试题第[59-2]题[JAVA][队列的最大值][暴力][双端队列]

    [问题描述][中等] [解答思路] 1. 暴力 复杂度分析 class MaxQueue {Queue<Integer> queue = new LinkedList();int maxV ...

  2. [剑指offer]面试题第[47]题[JAVA][礼物的最大价值][动态规划]

    [问题描述][中等] [解答思路] 1动态规划 动态规划流程 第 1 步:设计状态 f(i, j)f(i,j) 为从棋盘左上角走至单元格 (i ,j)(i,j) 的礼物最大累计价值 第 2 步:状态转 ...

  3. [剑指offer]面试题第[60]题[JAVA][n个骰子的点数][动态规划][空间优化]

    [问题描述][中等] 把n个骰子扔在地上,所有骰子朝上一面的点数之和为s.输入n,打印出s的所有可能的值出现的概率.你需要用一个浮点数数组返回答案,其中第 i 个元素代表这 n 个骰子所能掷出的点数集 ...

  4. [剑指offer]面试题第[55-1]题[JAVA][二叉树的深度][BFS][DFS]

    [问题描述][简单] 输入一棵二叉树的根节点,求该树的深度.从根节点到叶节点依次经过的节点(含根.叶节点)形成树的一条路径,最长路径的长度为树的深度.例如:给定二叉树 [3,9,20,null,nul ...

  5. [剑指offer]面试题第[1]题[JAVA][二维数组中的查找][数组][二分]

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

  6. [剑指offer]面试题第[36]题[JAVA][二叉搜索树与双向链表][递归]

    [问题描述][中等] [解答思路] 中序遍历 时间复杂度:O(N) 空间复杂度:O(N) class Solution {Node pre, head;public Node treeToDoubly ...

  7. [剑指offer]面试题第[44]题[JAVA][数字序列中某一位的数字][找规律]

    [问题描述][中等] [解答思路] 找规律 时间复杂度:O(logN) 空间复杂度:O(logN) class Solution {public int findNthDigit(int n) {in ...

  8. [剑指offer]面试题第[45]题[JAVA][把数组排成最小的数][快排][ Comparator][PriorityQueue]

    [问题描述][中等] [解答思路] 1. 快速排序 时间复杂度:O(N^2) 空间复杂度:O(1) class Solution {public String minNumber(int[] nums ...

  9. [剑指offer]面试题第[65]题[JAVA][不用加减乘除做加法][位运算]

    [问题描述][简单] [解答思路] 1. 位运算 时间复杂度:O(1) 空间复杂度:O(1) public int add(int a, int b) {while(b != 0) { // 当进位为 ...

最新文章

  1. linux——环境变量与文件查找
  2. Python 入门篇-python3和python2的差异总结
  3. android 中system 如何打包编译生成的
  4. ES6基础5(Promise)-学习笔记
  5. (2021) 25 [持久化] 文件系统实现:FAT和UNIX文件系统
  6. gbdt 回归 特征重要性 排序_gbdt、xgb、lgb、cat面经整理——from牛客
  7. solr mysql 自动同步_MongoDB和Solr的整合以及实现数据同步功能
  8. 【前端周刊】20190606
  9. PC机中各类存储器的逻辑连接情况
  10. 系统字体大小导致rem布局变大
  11. 计算机毕设选题可以选什么?计算机本科毕业设计选题2023年指南
  12. 国际电话号码的区号mysql数据表
  13. Android智能硬件开发心得总结(二)
  14. 金融信创虽风正时济,应对挑战该如何乘风破浪(一)
  15. 电、气物联网联合管理监测方案
  16. 社群运营如何做,三个需要注意的重点事项
  17. 集合框架|Java集合框架基本使用
  18. 新加坡金融科技节 | 蚂蚁金服CTO程立:面向全球开放,与合作伙伴共赢
  19. HTML5七夕情人节表白网页(幻化3D相册) HTML+CSS+JavaScript 求婚示爱代码 520情人节告白代码 程序员表白源码 3D旋转相册 js烟花代码 css爱心表白
  20. notepad++设置中文刷新后还是英文解决方法

热门文章

  1. 学习资料(不定更新)
  2. OpenCV人脸检测并把图片写成avi视频
  3. C#判断点和直线的位置关系
  4. 委托事件实现更新窗体
  5. 通过Servlet的response绘制页面验证码
  6. android wifi连接手机,Android手机无线连接利器-AirDroid
  7. c语言定义数组6,C语言教程6数组.ppt
  8. 关于HttpUrlConnection网络请求之返回结果的中文乱码解决方法
  9. java config 类_Spring ----JavaConfig类代替XML配置Bean
  10. 随机排列实现 -shuffle算法