- StringBuffer向String转: String str = sb.toString();
- StringBuffer复制后,会改变原来的值,
1.String在修改时不会改变对象自身,在每次对String类型进行改变的时候其实都等同于生成了一个新的String对象,然后将指针指向新的String对象,所以经常改变内容的字符串最好不要用String。
2.StringBuffer在修改时会改变对象自身
每次结果都会对StringBuffer对象本身进行操作,而不是生成新的对象,再改变对象引用。所以在字符串对象经常改变的情况下推荐使用StringBuffer。因此,用StringBuffer实现的 strCpy2比用String实现的strCpy1效率高
- 不能将StringBuffer赋值为null,否则不能append,
- char类型使用==,字符串类型使用equals(比较字符串是否引用同一地址,如果2个字符串是同一个对象,那可以用,如果不是同一个对象,只是比较内容是否一致,则不可以用==)
- 将字符char转为整数
先转为字符串
String temp = s.charAt(i) +"";
num = num*10 + Integer.parseInt(temp);
import java.util.*;
class ss1
{
public static void main(String[] args)
{
String s = "3[a10[bc]]";
System.out.println(decodeString(s));
}
public static String decodeString(String s) {
Deque<Integer> dstack = new LinkedList<Integer>();
Deque<Character> sstack = new LinkedList<Character>();
//StringBuffer fan = new StringBuffer();
//将数字进数字栈
int num = 0;
for(int i = 0; i < s.length(); i++)
{
System.out.println("当前字符串:"+s.charAt(i));
if(Character.isDigit(s.charAt(i)))
{
String temp = s.charAt(i) +"";
num = num*10 + Integer.parseInt(temp);
//如果是100,需要判断后面是否为数字,如果不是,才存入
if(!Character.isDigit(s.charAt(i + 1)))
{
dstack.push(num);
System.out.println(num);
num = 0;
}
//System.out.println("sstack.peek():"+sstack.peek());
}
//如果是左括号和字符,进字符栈
else if(!Character.isDigit(s.charAt(i)) && s.charAt(i) != ']')
{
sstack.push(s.charAt(i));
System.out.println("sstack.peek():"+sstack.peek());
}
//如果是右括号,出栈
else if(s.charAt(i) == ']')
{
StringBuffer fan = new StringBuffer();
while(sstack.peek() != '[')
{
System.out.println("sstack.peek():"+sstack.peek());
fan.append(sstack.pop());
}
//System.out.println(fan);
//将【出栈
sstack.pop();
fan = fan.reverse();
System.out.println("fan:"+fan);
//
//StringBuffer fan_copy = fan;
int len = fan.length();
//System.out.println("fan_copy:"+fan_copy);
//System.out.println("fan_copy.length():"+fan_copy.length());
//将数字栈顶出栈;
int cishu = dstack.pop()-1;
System.out.println("cishu:"+cishu);
//将字符串重复
while(cishu > 0)
{
//遍历StringBuffer的字符
//for(String ss:fan_copy)
for(int k = 0; k < len; k++)
{
fan.append(fan.charAt(k));
System.out.println("k:"+k);
System.out.println("fan:"+fan);
//System.out.println("fan_copy.length():"+fan_copy.length());
//System.out.println("cishu-1:"+cishu);
}
cishu--;
}
System.out.println("fan_chongfu:"+fan);
//将重复的字符串进字符栈
//遍历StringBuffer的字符
for(int j = 0; j < fan.length(); j++)
{
sstack.push(fan.charAt(j));
}
}
// num = 0;
}
//将字符串栈中的元素保存为字符串
StringBuffer re= new StringBuffer();
Iterator<Character> it = sstack.iterator();
while(it.hasNext())
{
Character cur = it.next();
re.append(cur);
}
re.reverse();
String str = re.toString();
return str;
}
}