我通常可以这样做,这是非常简单的代码,但我有一个脑屁的地狱,我渴望弄清楚我的愚蠢。我写了这个真实的快速尝试我听说过的新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]+" ");
}
}
}
答案 0 :(得分:2)
错误在于:String[] word={tokens.nextToken()}
。您创建一个只包含一个元素的数组 - 当前标记。此外,countTokens()
还会返回剩余的令牌。在调用nextToken()
后,它每次都会更新。
修复它:只需遍历所有标记,将它们放入列表中,然后向后打印列表。
答案 1 :(得分:1)
问题是String [] 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();
}
答案 2 :(得分:1)
不确定为何使用此StringTokenizer
来反转string
。
顺便说一下你的 for 循环只运行一次而for循环中的String[]
只保存一个元素,即userInput(而不是userInput字符数组),看看你是否能弄清楚是什么你的做法错了......
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]+ " ");
}
}
答案 3 :(得分:0)
此方法调用类似下一个(令牌)应该起作用:
public static void next (StringTokenizer tokens){
String next = null;
if (tokens.hasMoreTokens()){
next = tokens.nextToken();
next(tokens);
}
if (next != null){
System.out.println(next);
}
}