我必须创建一个getToken函数,它将从输入缓冲区一次返回一个标记。我还需要实现一个isWhiteSpace函数,如果传递给它的字符是空格(空格,制表符,换行符),则返回true;如果是CRLF或EOF,则返回false。
我的问题是,当我输入一个字符串时,它只会转到第一个空格字符并停止。如果我从一个空格开始,它只会打印一个空白字符串。我该如何解决这个问题?
public class Lab1 {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
System.out.println("Welcome to the Tokenizer!");
while (true) {
System.out.print("Command: ");
String s = sc.nextLine();
String tk = getToken(s);
if (tk.equals("quit")) {
break;
} else {
System.out.println(tk);
}
}
}
static String getToken(String w) {
String b = "";
for (int i = 0; i < w.length(); i++) {
char c = w.charAt(i);
if (!isWhite(c)) {
b = b + c;
} else {
b = b + "";
break;
}
}
return b;
}
static boolean isWhite(char ch) {
return (ch == ' ' || ch == '\t' || ch == '\r' || ch == '\n');
}
}
答案 0 :(得分:0)
如果每行有多个令牌,则必须将getToken方法重命名为getTokens并返回一个ArrayList of Strings。 然后,您可以遍历main方法上的标记。 以下是示例代码,其中包含一些建议的更改:
static ArrayList<String> getTokens(String w) {
ArrayList<String> tokens = new ArrayList<>(0);
StringBuilder lastWord = new StringBuilder();
for (int i = 0; i < w.length(); i++) {
char c = w.charAt(i);
if (isWhiteSpace(c)) { // rename to isWhiteSpace, it's a more specific name
tokens.add(lastWord); // if it's a white space add the last word to the list
lastWord.clear(); // clear the buffer
} else {
lastWord.append(c); // append the char to the buffer
}
}
// handle the last word
if (lastWord.length() > 0) {
tokens.add(lastWord);
}
return tokens;
}