我们介绍Java数据类型string stringbuffer和stringbuilder
三者的区别
- String是安全的、不可变的。对已经存在的String对象的修改都是创建一个新的对象保存新的值。适用于字符串的内容不经常改变的情况,如常量声明,少量变量运算。
- StringBuffer是线程安全的可变字符序列,直接对StringBuffer对象进行操作,但不能修改。所有操作类似于串行顺序发生的。适用于对字符串进行频繁运算,并且运行多线程环境。对象被建立后,分配内存初始保存一个null,append()赋值。
- 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();
}
}
目录