剑指offer+面试题5-字符串-替换空格(java解答)

我们介绍Java数据类型string stringbuffer和stringbuilder

三者的区别

  1. String是安全的、不可变的。对已经存在的String对象的修改都是创建一个新的对象保存新的值。适用于字符串的内容不经常改变的情况,如常量声明,少量变量运算。
  2. StringBuffer是线程安全的可变字符序列,直接对StringBuffer对象进行操作,但不能修改。所有操作类似于串行顺序发生的。适用于对字符串进行频繁运算,并且运行多线程环境。对象被建立后,分配内存初始保存一个null,append()赋值。
  3. StringBuilder是不安全的可变字符序列,但是不支持并发操作。适用于对字符串进行频繁运算,并且运行单线程环境。

具体使用方法

String
1.string.charAt(i),返回第I个位置的字符。在字符串中索引位置是从0开始的。
2.string.indexOf(x),返回字符x在字符串中第一次出现的位置,未出现则返回-1.
3.string.indexOf(x,fromIndex),返回从第fromIndex个字符开始检索的x的位置。
4.string.lastIndexOf(x),查找x最后一次出现的位置。
5.string.lastIndexOf(x,fromIndex),返回从第fromIndex个字符开始检索的x最后出现的位置。
在使用中,"xxx"这样的双引号中是string,'x’这样的单引号中式character。

StringBuffer
1.StringBuffer stringBuffer = new StringBuffer()。
2.stringBuffer.append(“xxx”),将xxx添加到末尾。
3.stringBuffer.deleteCharAt(index),删除指定位置字符。
4.stringBuffer.insert(index, string),在指定位置插入字符串。
5.stringBuffer.reverse(),将字符串反转。
6.stringBuffer.setCharAt(index,x),将指定位置设置为指定字符。
7.stringBuffer.toString(),将其转化为字符串。

StringBuilder
与stringBuffer相似

下面给出一些字符串知识的参考链接

java各类型String,int,char,long,StringBuilder,StringBuffer,Integer之间的转换总结

package offer;

public class T05_ReplaceBlank{
	public String ReplaceBlank(StringBuilder str) {
		if(str==null)
			return null;
		int oldLen=str.length();
		for(int i=0;i<oldLen;i++) {
			if(str.charAt(i)==' ')
			{
				str.append("12");				
			}
		}
		
	int i=oldLen-1;
	int j=str.length()-1;
	
	while(i>=0&&j>i) {
		char c=str.charAt(i);
		i--;
		
		if(c==' ') {
			str.setCharAt(j--, '0');
			str.setCharAt(j--, '2');
			str.setCharAt(j--, '%');
		}else {
			str.setCharAt(j--, c);
		}
	}
	return str.toString();
	}
	
	//==============测试代码================
	void Test(String testName,StringBuilder str,String expected)
	{
		if(testName!=null)
			System.out.print(testName+" begins: ");
		
		ReplaceBlank(str);
		
		if(expected==null && str==null)
			System.out.println("passed.");
		else if(expected==null && str!=null)
			System.out.println("failed.");
		else if(str.toString().equals(expected))
			System.out.println("passed.");
		else
			System.out.println("failed.");
	}
	
	//空格在中间
	public void Test1()
	{
		StringBuilder str=new StringBuilder();
    	str.append("hello world");
    	Test("Test1",str,"hello%20world");
	}

	//空格在开头
	public void Test2()
	{
		StringBuilder str=new StringBuilder();
    	str.append(" helloworld");
    	Test("Test2",str,"%20helloworld");
	}
	
	//空格在末尾
	public void Test3()
	{
		StringBuilder str=new StringBuilder();
    	str.append("helloworld ");
    	Test("Test3",str,"helloworld%20");
	}

	//连续两个空格
	public void Test4()
	{
		StringBuilder str=new StringBuilder();
    	str.append("hello  world");
    	Test("Test4",str,"hello%20%20world");
	}

	//传入null
	public void Test5()
	{
    	Test("Test5",null,null);
	}

	//传入内容为空
	public void Test6()
	{
		StringBuilder str=new StringBuilder();
    	Test("Test6",str,"");
	}
	
	//传入一个空格
	public void Test7()
	{
		StringBuilder str=new StringBuilder();
	    str.append(" ");
	    Test("Test7",str,"%20");
	}
	
	//传入字符没有空格
	public void Test8()
	{
		StringBuilder str=new StringBuilder();
	    str.append("helloworld");
	    Test("Test8",str,"helloworld");
	}
	
	//传入字符全是空格
	public void Test9()
	{
		StringBuilder str=new StringBuilder();
	    str.append("   ");
	    Test("Test9",str,"%20%20%20");
	}
}

主函数

import offer.T05_ReplaceBlank;

public class Solution {

    public static void main(String[] args) {
    	T05_ReplaceBlank test=new T05_ReplaceBlank();
    	test.Test1();
    	test.Test2();
    	test.Test3();
    	test.Test4();
    	test.Test5();
    	test.Test6();
    	test.Test7();
    	test.Test8();
    	test.Test9();
    	 
    }    
}

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值