使用int i,int j,char temp在不增加额外内存的条件下把StringBuilder s = new StringBuilder("this is a book")变成"book a is this".
解决方案 »
- 关于一个打包成jar的简单问题
- I/O问题
- 为什么获取js中的URL的参数的值总是为null(ajax)
- java编写计算器代码,我错哪了?
- 一个非常奇怪的问题,请教各位!
- java调用command命令,输出outputStream写入文件的一个问题
- 这个代码为什么同步没有实现?4个窗口出售100张票
- 请问怎么设TextArea的背景?还是要用其他class??高手救命!!!谢谢
- illegal character: \12288???什么是不合法的存在??
- 急!!!如何使用Broland Enterprise Server开发分布式应用程序
- 用Java Spring Junit测试,每次运行时都报错,求神相助!!
- 【求教】布尔类型b=true,那么if语句里if(b==true)和if(true==b)有什么区别?
public static void main(String[] args) {
int i, j;
char temp;
StringBuilder s = new StringBuilder("this is a book");
i = 0;
do{
j = s.indexOf(" ",i); //end
if(j > 0)
--j;
else
j = s.length() - 1;
while (i < j){
temp = s.charAt(j);
s.setCharAt(j,s.charAt(i));
s.setCharAt(i, temp);
--j;
++i;
};
do{
++i;
}while ( i < s.length() - 1 && s.charAt(i)!=' ');
++i;
}while (i < s.length() );
System.out.println(s); j = s.length();
for (i = 0; i < j/2; ++i)
{
temp = s.charAt(j-i-1);
s.setCharAt(j-i-1,s.charAt(i));
s.setCharAt(i, temp);
}
System.out.println(s);
}
StringBuilder s = new StringBuilder("this is a book");
int j=s.length();
for(int i=0;i<s.length();i++){
if(s.charAt(0)==' '){
j=s.length()-i-1;
s.delete(0, 1);
s.insert(j, ' ');
}else{
char temp=s.charAt(0);
s.delete(0, 1);
s.insert(j-1, temp);
}
}
System.out.println(s);结果:book a is this
int i=0;
int j = 0;
char temp;
for( ;i<s.length();i++){
temp = s.charAt(s.length() - 1);
if(temp == ' '){
j=i;
}
if(s.charAt(j) == ' '){
j++;
}
s.insert(j, temp);
s.deleteCharAt(s.length() - 1);
}
System.out.println("result: " + s.toString());
int i=0;
int j = 0;
char temp;
for( ;i<s.length();i++){
temp = s.charAt(s.length() - 1);
if(temp == ' '){
j=i;
}
if(s.charAt(j) == ' '){
j++;
}
s.insert(j, temp);
s.deleteCharAt(s.length() - 1);
}
System.out.println("result: " + s.toString());
int i = 0;
int j = 0;
char temp;
for (; i < s.length(); i++) {
temp = s.charAt(s.length() - 1);
if (temp == ' ') {
j = i;
}
if (s.charAt(j) == ' ') {
j++;
}
s.deleteCharAt(s.length() - 1);
s.insert(j, temp);
}
System.out.println("result: " + s.toString());
s.insert(j, temp);
s.deleteCharAt(s.length() - 1);先插入就增加额外内存了,所以要先delete再insert先插再删?
StringBuilder初始化长度是参数长度+16,insert只要不超过这个这个值,就不会增加内存
既然这样用 直接大招System.out.print(s.reverse());更简单
既然这样用 直接大招System.out.print(s.reverse());更简单我最开始也天真的一位reverse可以拯救一切……但是事实证明:
1、reverse是把所有的字符全部倒过来(那画面太美,我一直在笑);
2、reverse()返回的是StringBuilder,不toString会出问题……=_,=|||……
不然就是5楼的方法,出现 ' ' 也算是不符合要求,delete和insert 看源码 确实是没有 新增 内存