Member 12589834 Ответов: 0

Создание базового пользовательского stringtokenizer


Мне нужно реализовать свою собственную версию класса StringTokenizer. Я хотел бы знать, двигаюсь ли я, по крайней мере, в правильном направлении с моим isDelim и моим первым St-методом, поскольку они единственные, с кем я хочу работать.

Что я уже пробовал:

Вот 2 метода, с которыми я хочу работать:
public ST(String s, String d)
    {
        star = new String[50];
        String str = s;
        int start = 0;
        int end =0;
        //String delim = d; not sure where to put it...
        String token;
        numTokens = 0;
 
        for(int i=1; i<str.length(); i++)        
        {
            String c1 = str.substring(i, i+1);
            String c2 = str.substring(i-1, i);
 
            if(c1 == " ")
            {
                if(c2 != " ")
                {
                    start = i+2;
                }
            }
            if(c1 != " ")
            {
                if(c2 == " ")
                {
                    end = i;
                }
            }
 
            if (end < start)
            {
                end = str.length();
            }
            star[numtokens] = str.substring(start,end);
            System.out.println("[" + star[numtokens] + "]");
            numtokens ++;
       }
    }

public boolean isDelim(String s)
    {
        String delim = s;
 
        return delim.substring(0, 1).equals(" ");
    }


И вот все вместе:
class ST
{
    String star[];
    int numTokens;
    int index = 0;
 
    public ST(String s, String d)
    {
        star = new String[50];
        String str = s;
        int start = 0;
        int end =0;
        //String delim = d; not sure where to put it...
        String token;
        numTokens = 0;
 
        for(int i=1; i<str.length(); i++)        
        {
            String c1 = str.substring(i, i+1);
            String c2 = str.substring(i-1, i);
 
            if(c1 == " ")
            {
                if(c2 != " ")
                {
                    start = i+2;
                }
            }
            if(c1 != " ")
            {
                if(c2 == " ")
                {
                    end = i;
                }
            }
 
            if (end < start)
            {
                end = str.length();
            }
            star[numtokens] = str.substring(start,end);
            System.out.println("[" + star[numtokens] + "]");
            numtokens ++;
       }
    }

    public boolean isDelim(String s)
    {
        String delim = s;
 
        return delim.substring(0, 1).equals(" ");
    }
 
    public ST(String s)
    {
        this(s, " ");
    }
 
    public int countTokens()
    {
        return (numTokens - index);
    }
 
    public boolean hasMoreTokens()
    {
        return (numTokens > index);
    }
 
    public String nextToken()
    {
        return (star[index++]);
    }
}

public class Token
{
    public static void main(String argv[])
    {
        String str;

    //1)
        str = "Hello world";
        ST stok= new ST(str);
        
        System.out.println(str);

        while (stok.hasMoreTokens())
        {
            System.out.println("#tokens = " + stok.countTokens());
            System.out.println("token: [" + stok.nextToken() + "]");
        }
        System.out.println("#tokens = " + stok.countTokens());
        //System.out.println("token: " + stok.nextToken());
        System.out.println("\n\n");

    //2)
        str = "    Hello    world   ";
        stok= new ST(str);
        
        System.out.println(str);

        while (stok.hasMoreTokens())
        {
            System.out.println("#tokens = " + stok.countTokens());
            System.out.println("token: [" + stok.nextToken() + "]");
        }
        System.out.println("#tokens = " + stok.countTokens());
        System.out.println("\n\n");

    //3)
        str = "root:x:0:0:root:/root:/bin/bash";
        stok = new ST(str, ":");

        System.out.println(str);


        int n = stok.countTokens();
        System.out.println("#tokens = " + n);

        for (int i=0; i<n; i++)
        {
            System.out.println("token [" + stok.nextToken() + "]");
        }

        //System.out.println("username = " + stok.nextToken());
        //System.out.println("password = " + stok.nextToken());
        //System.out.println("userid   = " + stok.nextToken());
        //System.out.println("groupid  = " + stok.nextToken());
        //System.out.println("comment  = " + stok.nextToken());
        //System.out.println("home dir = " + stok.nextToken());
        //System.out.println("shell    = " + stok.nextToken());
        //System.out.println("\n\n");

    //4)
        str = "Hello-world.It is!a nice day,today";
        stok= new ST(str,"-.!, ");
        
        System.out.println(str);

        while (stok.hasMoreTokens())
        {
            System.out.println("#tokens = " + stok.countTokens());
            System.out.println("token: [" + stok.nextToken() + "]");
        }
        System.out.println("#tokens = " + stok.countTokens());
    }
}

Richard MacCutchan

Единственный способ убедиться в этом-запустить программу по некоторым тестовым данным и проверить результаты.

0 Ответов