当前位置:编程学习 > JAVA >>

StringBuffer类的toString方法什么时候被执行

package web.job;

class DicNode{
int count;//当前字符在这个位置 出现的次数
int next[]=new int[26];  //其下一个字符的指针,next[i]中,i 表示字符 ch , next[i] 表示地址
public String toString(){
StringBuffer s=new StringBuffer();
s.append(count+" |");
for(int i=0;i<26;i++){
if(next[i]==0){
s.append(" |");
}else{
s.append((char)(i+'a')+" |");
}
}
return s.toString();
}
}

public class TrieTest {

/**
 * @param args
 */
static DicNode tree[]=new DicNode[10000];
public static void main(String[] args) {
for(int i=0;i<tree.length;i++){
tree[i]=new DicNode();
}
create("abcdefg");
create("ab");
create("abcdefg");
create("google");
for(int i=0;i<7;i++){
System.out.println(i+" ");
System.out.println(tree[i].toString());
}
System.out.println(find("google"));
del("google");
System.out.println(find("google"));
}

private static void create(String str) {
int treepos=0;
int index=0;
for(int i=0;i<str.length();i++){
int ch=str.charAt(i)-'a';
if(tree[tree[index].next[ch]].count==0){   //表明 字符 ch 还不在树中 
tree[index].next[ch]=treepos;// tree[index].next[ch] 表示指向 ch 结点的孩子指针,里面存放的是 ch 在树中的位置,其值为索引
tree[treepos++].count=1;
}else{
tree[tree[index].next[ch]].count++;
}
index=tree[index].next[ch];     //当前结点变为其孩子结点
}

}


private static int find(String str) {//找出有没有以str 为参数的单词,如果有,在文件中出现几次,没有返回0 
int index=0;
for(int i=0;i<str.length();i++){
int ch=str.charAt(i)-'a';
if(tree[tree[index].next[ch]].count!=0){  //表示出现过  
index=tree[index].next[ch];
}else{
return 0;
}
}
return tree[index].count;
}

private static void del(String str) {
int index=0;
if(find(str)==0){
System.out.println("this word not find...");
return;
}
for(int i=0;i<str.length();i++){
int ch=str.charAt(i)-'a';
tree[tree[index].next[ch]].count--;
index=tree[index].next[ch];
}
}
}


今天看了一个字典树的建立,一直纠结在StringBuffer方法的tostring方法是不是在类被调用的时候执行? --------------------编程问答--------------------  public String toString(){
        StringBuffer s=new StringBuffer();
        s.append(count+" |");
        for(int i=0;i<26;i++){
            if(next[i]==0){
                s.append(" |");
            }else{
                s.append((char)(i+'a')+" |");
            }
        }
        return s.toString();
    }
这个方法return s.toString(); 不就是 StringBuffer调用的toString方法么 --------------------编程问答-------------------- DicNode你这个类没有看到构造方法啊,这样也行啊?既然你的toString是你自己类的一个方法,那么你创建类并不会调用的,你必须手工调用才会调用这个类。
DicNode d = new DicNode();//这时候并不会调用toString方法。
d.toString();这样才会调用。 --------------------编程问答--------------------
引用 1 楼  的回复:
 public String toString(){
        StringBuffer s=new StringBuffer();
        s.append(count+" |");
        for(int i=0;i<26;i++){
            if(next[i]==0){
                s.append(" |");
  ……

但是这个return s.toString();是属于toString();方法的啊,没被调用,怎么可能进入到方法内部呢? --------------------编程问答--------------------
引用 3 楼  的回复:
引用 1 楼  的回复:

 public String toString(){
        StringBuffer s=new StringBuffer();
        s.append(count+" |");
        for(int i=0;i<26;i++){
            if(next[i]==0){
                s.a……

这是调用无参的构造函数,是不需要显示定义的。
{DicNode d = new DicNode();//这时候并不会调用toString方法。
d.toString();这样才会调用。}课这句话在代码中并没有出现啊
补充:Java ,  Java相关
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,