Создание базового пользовательского 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
Единственный способ убедиться в этом-запустить программу по некоторым тестовым данным и проверить результаты.