我通常可以做到这一点,这是非常简单的代码,但是我有一个大脑的地狱,我渴望弄清楚自己的愚蠢。我很快就写了这本书,尝试了一个我听说的新IDE,它应该采用一个输入的字符串并以相反顺序返回单词,但是它一直告诉我,在某个时候,字符串的索引之一[]没有价值。
import java.util.StringTokenizer;
import java.util.Scanner;
public class Example {
/**
* @param args
*/
public static void main(String[] args) {
//set up input
Scanner input=new Scanner(System.in);
System.out.println("type something here");
String sentence=input.nextLine();
//set up StringTokenizer
StringTokenizer tokens=new StringTokenizer(sentence);
//setup for loop
for(int y=tokens.countTokens()-1; y>=0; y--){
String[] word={tokens.nextToken()};
System.out.print(word[y]+" ");
}
}
}
错误在这里: String[] word={tokens.nextToken()}
。您创建一个仅具有一个元素的数组 - 当前令牌。countTokens()
也返回剩余的令牌。nextToken()
被调用后,每次都会更新。
修复它:只需迭代所有令牌,将它们放入列表中,然后向后打印列表。
问题是字符串[] word = {tokens.nexttoken()}。
我认为您想要一些看起来像这样的东西:
int totalTokens = tokens.countTokens()
String[] word = new String[totalTokens]
//setup for loop
for(int y=totalToken-1; y>=0; y--){
word[y] = tokens.nextToken();
}
不确定为什么您使用此 StringTokenizer
只是为了逆转 string
。
btw your for loop仅运行一次,而 String[]
in for loop仅容纳一个元素,即userInput(而不是用户input字符的数组),请参阅您是否可以找出您的问题方法...
public static void main(String[] args) {
//set up input
Scanner input=new Scanner(System.in);
System.out.println("type something here");
String sentence=input.nextLine();
//set up StringTokenizer
StringTokenizer tokens=new StringTokenizer(sentence);
String tmpStr = tokens.nextToken();
int tmp=tmpStr.length();
for(int y=tmp-1; y>=0; y--){
char[] word=tmpStr.toCharArray();
System.out.print(word[y]+ " ");
}
}
此方法像下一步(令牌)一样起作用:
public static void next (StringTokenizer tokens){
String next = null;
if (tokens.hasMoreTokens()){
next = tokens.nextToken();
next(tokens);
}
if (next != null){
System.out.println(next);
}
}