String与StringBuffer的那些事----------剑指Offer旅程第一站

博客围绕剑指Offer中字符串空格替换成“%20”的题目展开。介绍了String与StringBuffer的区别,前者对象不可变,后者可变;还详细阐述了String和StringBuffer常用方法释义,最后说明了char和String的区别,char存单个字符,String可存多个。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引入剑指Offer题目:

题目描述

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

Java代码如下:

public class Solution {
    public String replaceSpace(StringBuffer str) {
    	StringBuffer mStr= new StringBuffer();
        String s = str.toString();
        for(int i =0; i<s.length();i++){
            if(s.charAt(i)==' '){
                mStr = mStr.append("%20");
            }else{
                mStr = mStr.append(s.charAt(i));
            }
        }
        return mStr.toString();
    }
}

        此题比较简单,主要思路:判断字符里的空格,替换成%20,输出。但是解决过程中还是参考了一些函数的用法。下面温习一下String、StringBuffer的那些重要的事儿:

1)String 与StringBuffer的区别

        通过上述的程序,我们容易看得出来::String的对象是不可变的,StringBuffer的对象是可变的。(可以抽象理解成,前者是数组,后者是集合ArrayList。数组一旦确定长度,不再可变,但是后者可以动态拓展)。如果对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String类型,使用toString()方法即可!

2)String常用方法释义

  • public int length():返回该字符串的长度
  • public char charAt(int index): 返回字符串中指定位置的字符;注意字符串中第一个字符索引是0,最后一个是length()-1
  • public String substring(int beginIndex):该方法从beginIndex位置起,从当前字符串中取出剩余的字符作为一个新的字符串返回
  • public String substring(int beginIndex, int endIndex): 该方法从beginIndex位置起,从当前字符串中取出到endIndex-1位置的字符作为一个新的字符串返回
  • public int compareTo(String anotherString):该方法是对字符串内容按字典顺序进行大小比较,通过返回的整数值指明当前字符串与参数字符串的大小关系。若当前对象比参数大则返回正整数,反之返回负整数,相等返回0
  • public int compareToIgnore(String anotherString):与compareTo方法相似,但忽略大小写
  • public boolean equals(Object anotherObject):比较当前字符串和参数字符串,在两个字符串相等的时候返回true,否则返回false。
  • public boolean equalsIgnoreCase(String anotherString):与equals方法相似,但忽略大小写
  • public String concat(String str):将参数中的字符串str连接到当前字符串的后面,效果等价于"+"
  • public int indexOf(int ch/String str):用于查找当前字符串中字符或子串,返回字符或子串在当前字符串中从左边起首次出现的位置,若没有出现则返回-1

  • public int indexOf(int ch/String str, int fromIndex): 该方法与第一种类似,区别在于该方法从fromIndex位置向后查找

  • public int lastIndexOf(int ch/String str):该方法与第一种类似,区别在于该方法从字符串的末尾位置向前查找

  • public int lastIndexOf(int ch/String str, int fromIndex):该方法与第二种方法类似,区别于该方法从fromIndex位置向前查找

  • public String toLowerCase():返回将当前字符串中所有字符转换成小写后的新串

  • public String toUpperCase():返回将当前字符串中所有字符转换成大写后的新串

  • public String replace(char oldChar, char newChar):用字符newChar替换当前字符串中所有的oldChar字符,并返回一个新的字符串

  • public String replaceFirst(String regex, String replacement):该方法用字符replacement的内容替换当前字符串中遇到的第一个和字符串regex相匹配的子串,应将新的字符串返回

  • public String replaceAll(String regex, String replacement):该方法用字符replacement的内容替换当前字符串中遇到的所有和字符串regex相匹配的子串,应将新的字符串返回

  • String trim():截去字符串两端的空格,但对于中间的空格不处理

  • boolean statWith(String prefix)boolean endWith(String suffix):用来比较当前字符串的起始字符或子字符串prefix和终止字符或子字符串suffix是否和当前字符串相同,重载方法中同时还可以指定比较的开始位置offset

  • regionMatches(boolean b, int firstStart, String other, int otherStart, int length):从当前字符串的firstStart位置开始比较,取长度为length的一个子字符串,other字符串从otherStart位置开始,指定另外一个长度为length的字符串,两字符串比较,当b为true时字符串不区分大小写

  • contains(String str):判断参数s是否被包含在字符串中,并返回一个布尔类型的值

  • String[] split(String str):将str作为分隔符进行字符串分解,分解后的字字符串在字符串数组中返回

  • valueOf() :String类中提供了String valueOf()放法,用作基本类型转换为字符串类型,例如String s1 = String.valueOf(12);
     

3)StringBuffer常用方法释义

  •  public StringBuffer append(boolean b) :该方法的作用是追加内容到当前StringBuffer对象的末尾,类似于字符串的连接,调用该方法以后,StringBuffer对象的内容也发生改 变,例如: StringBuffer sb = new StringBuffer(“abc”); sb.append(true); 则对象sb的值将变成”abctrue”

  • public StringBuffer deleteCharAt(int index) :该方法的作用是删除指定位置的字符,然后将剩余的内容形成新的字符串。例如: StringBuffer sb = new StringBuffer(“KMing”); sb. deleteCharAt(1); 该代码的作用删除字符串对象sb中索引值为1的字符,也就是删除第二个字符,剩余的内容组成一个新的字符串。所以对象sb的值变 为”King”。 还存在一个功能类似的delete方法: public StringBuffer delete(int start,int end) 该方法的作用是删除指定区间以内的所有字符,包含start,不包含end索引值的区间。例如: StringBuffer sb = new StringBuffer(“TestString”); sb. delete (1,4); 该代码的作用是删除索引值1(包括)到索引值4(不包括)之间的所有字符,剩余的字符形成新的字符串。则对象sb的值是”TString”

  • public StringBuffer insert(int offset, boolean b)  :该方法的作用是在StringBuffer对象中插入内容,然后形成新的字符串。例如: StringBuffer sb = new StringBuffer(“TestString”); sb.insert(4,false); 该示例代码的作用是在对象sb的索引值4的位置插入false值,形成新的字符串,则执行以后对象sb的值是”TestfalseString”

  • public StringBuffer reverse()  :该方法的作用是将StringBuffer对象中的内容反转,然后形成新的字符串。例如: StringBuffer sb = new StringBuffer(“abc”); sb.reverse(); 经过反转以后,对象sb中的内容将变为”cba”

  • public void setCharAt(int index, char ch):该方法的作用是修改对象中索引值为index位置的字符为新的字符ch。例如: StringBuffer sb = new StringBuffer(“abc”); sb.setCharAt(1,’D’); 则对象sb的值将变成”aDc”

  • public void trimToSize() :该方法的作用是将StringBuffer对象的中存储空间缩小到和字符串长度一样的长度,减少空间的浪费,和String的trim()是一样的作用。

  • length()方法 :该方法的作用是获取字符串长度 (注意搞清楚,String和StringBuffer调用的是方法,判断字符长度的时候,length是有括号的;而在数组中比如arrarys[3]={1,2,3},判断数组长度时,length是没有括号的,引用的是一个属性!)

  • setlength():该方法的作用是设置字符串缓冲区大小。 StringBuffer sb=new StringBuffer(); sb.setlength(100); 如果用小于当前字符串长度的值调用setlength()方法,则新长度后面的字符将丢失

  • sb.capacity(): 该方法的作用是获取字符串的容量。 StringBuffer sb=new StringBuffer(“string”); int i=sb.capacity(); 

  • ensureCapacity( ) :该方法的作用是重新设置字符串容量的大小。 StringBuffer sb=new StringBuffer(); sb.ensureCapacity(32); //预先设置sb的容量为32

  •  getChars( )该方法的作用是将字符串的子字符串复制给数组。 getChars(int start,int end,char chars[],int charStart); 

    StringBuffer sb = new StringBuffer("I love You"); int begin = 0; int end = 5; //注意ch字符数组的长度一定要大于等于begin到end之间字符的长度 //小于的话会报ArrayIndexOutOfBoundsException //如果大于的话,大于的字符会以空格补齐 char[] ch  = new char[end-begin];sb.getChars(begin, end, ch, 0); System.out.println(ch)

4)char 和 String 的区别

        char表示字符,定义时用单引号,只能存储一个字符,如char c=’w’; 而String表示字符串,定义时用双引号,可以存储一个或多个字符,如String mName=”chenshaowen”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值