请你设计一个可以解释字符串 command 的 Goal 解析器 。 ## command 由 “G”、"()" 和/或 “(al)” 按某种顺序组成。 ## Goal 解析器会将 “G” 解释为字符串 “G”、"()" 解释为字符串 “o” ,"(al)" 解释为字符串 “al” 。 ## 然后,按原顺序将经解释得到的字符串连接成一个字符串。 ## 给你字符串 command ,返回 Goal 解析器 对 command 的解释结果。
-
思路一
new一个StringBuilder,作为存储经过改变后的字符串,最后再转换成String.
string本身是不可改变的,它只能赋值一次,每一次内容发生改变,都会生成一个新的对象,然后原有的对象引用新的对象,而每一次生成新对象都会对系统性能产生影响.而StringBuilder类则不同,每次操作都是对自身对象进行操作,而不是生成新的对象,其所占空间会随着内容的增加而扩充,这样,在做大量的修改操作时,不会因生成大量匿名对象而影响系统性能
而当程序中需要大量的对某个字符串进行操作时,应该考虑应用StringBuilder类处理该字符串,其设计目的就是针对大量string操作的一种改进办法,避免产生太多的临时对象;而当程序中只是对某个字符串进行一次或几次操作时,采用string类即可
class Solution {
public String interpret(String command) {
StringBuilder sb = new StringBuilder();
for(int i=0;i<command.length();i++){
if(command.charAt(i)=='G'){
sb.append("G");
}else if(command.charAt(i)=='('&&command.charAt(i+1)==')'){
sb.append("o");
}else if(command.charAt(i)=='('&&command.charAt(i+1)=='a'&&
command.charAt(i+2)=='l'&&command.charAt(i+3)==')'){
sb.append("al");
}
}
String s = sb.toString();
return s;
}
}
-
思路二
利用String中的replaceJava中replace()、replaceAll()、replaceFirst()区别:replace()和replaceAll()都是替换所有,但replaceAll()支持正则表达式;replaceAll()和replaceFirst()都支持正则表达式,但replaceFirst()只替换第一个匹配项。*
class Solution {
public String interpret(String command) {
command=command.replace("()","o");
command=command.replace("(al)","al");
return command;
}
}