想做一个模版自动生成文件的程序,部分代码如下String pageTempPath = "D:/template/pages_temp.txt"; 
try 

// 读取模块文件 
FileInputStream pageTemp = new FileInputStream(pageTempPath); 
int lenghtPage = pageTemp.available(); 
byte bytes[] = new byte[lenghtPage]; 
pageTemp.read(bytes); 
pageTemp.close(); 
String pageStr = new String(bytes); } 
int prePage=pageid-1; 
int nextPage=pageid+1; 
if(prePage <1) 
prePage =1; 
if(nextPage>pageCount) 
nextPage = pageCount; 
System.out.println(pageStr); 
pageStr.replaceAll("#prepage#", pageStr+""); 
System.out.println(pageStr); 
看最后三句程序,打印出的pageStr如下: 
<div class="pages"><a href="#dominurl#/#category1#/#category2#/index#prepage#"><img src="images/pre.gif" alt="pre" /> 
<div class="pages"><a href="#dominurl#/#category1#/#category2#/index#prepage#"><img src="images/pre.gif" alt="pre" /> 
pageStr的值完全一样,也就是replaceAll并没有起作用,而pageStr是含有“#prepage#”这个字段的, 
郁闷无比,然后写了个测试类直接令String s = 刚才那个字符串,再调用s.replaceAll("#prepage#", pageStr+"");结果发现s的值却改变了,百思不得其解, 为什么上面第一种情况没有执行成功, 谢谢

解决方案 »

  1.   

    刚才又试了一下,把第一种没有替换成功的代码改为如下: 
    public void genKind2Page(int pageid) 

    String s ="<div class=\"pages\"><a href=\"#dominurl#/#category1#/#category2#/index#prepage#\">" 
    s.replaceAll("#prepage#", 1+""); 

    然后在main里调用该函数,发现s的值没有变化, 
    而把genKind2Page里面的代码直接放在main()里面,则发现s的值已经修改,ft,实在是郁闷。
      

  2.   

    s的值会修改?replaceAll returns the resulting Strings = s.replaceAll("...");   
      

  3.   

    String类是一个不变类 他的所有方法 只要是修改字符串的操作 都是返回一个新的对象来表示结果 而不是修改原来的对象
      

  4.   

    pageStr.replaceAll("#prepage#",   pageStr+"");replaceAll以后要赋值给一个对象
    看看JDK文档就清楚