java中replace的问题

import java.util.*;
public class StringTest{
public static void main(String[] args){
String s="敏感 <avbd> 我额度";
HtmlFileter hf=new HtmlFileter();
StringFileter sf=new StringFileter();
FileterList fl=new FileterList();
fl.add(hf).add(sf);
fl.doFileter(s);
String ss=hf.doFileter(s);
System.out.println(s);
System.out.println(ss);

}
}
interface Fileter{
String doFileter(String s);
}

class HtmlFileter implements Fileter{
public String doFileter(String s){
s.replace('<','[');
s.replace('>',']');
return s;
}
}

class StringFileter implements Fileter{
public String doFileter(String s){
//s.replace("敏感","");
return s;
}
}

class FileterList implements Fileter{
private ArrayList al=new ArrayList();
public FileterList add(Fileter f){
al.add(f);
return this;
}
public String doFileter(String s){
Iterator i=al.iterator();
if(i.hasNext()){
((Fileter)(i.next())).doFileter(s);
return s;
}
else{
return s;
}
}
}
为什么我的repalece 没用?

字符串常量是不变的,

比如String s="123敏感";
不管你后面对s做任何操作。 s还是s这个对象,不变。

你要对s重新赋值:
s=s.replace("敏感","");

那么这个时候 s就已经变成被替换后的值了。这就是你想要的,记住String这个特性就好了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-02-26
class
FileterList
implements
Fileter{
private
ArrayList
al=new
ArrayList();
public
FileterList
add(Fileter
f){
al.add(f);
return
this;
}
public
String
doFileter(String
s){
Iterator
i=al.iterator();
while(i.hasNext()){//把if改成while
s=((Fileter)(i.next())).doFileter(s);
}
return
s;
}
}
第2个回答  2009-12-04
class HtmlFileter implements Fileter{
public String doFileter(String s){
s.replace('<','[');
s.replace('>',']');
return s;
}
}
改成
class HtmlFileter implements Fileter{
public String doFileter(String s){
s= s.replace('<','[');
s= s.replace('>',']');
return s;
}
}
相似回答