Java 字符串标记器JOptionPane

Java 字符串标记器JOptionPane,java,Java,我有一个关于字符串标记器的快速问题。我正在摆弄这个愚蠢的程序,准备下周在学校进行一次测验(关于字符串标记器),我想知道你们中是否有人能给我提供一些关于如何在一个块中打印标记的信息,但显然是分开的。。。例如: import javax.swing.*; import java.util.*; public class stringTokenizer { public static void main (String [] args) { String questionData = "Wh

我有一个关于字符串标记器的快速问题。我正在摆弄这个愚蠢的程序,准备下周在学校进行一次测验(关于字符串标记器),我想知道你们中是否有人能给我提供一些关于如何在一个块中打印标记的信息,但显然是分开的。。。例如:

import javax.swing.*;
import java.util.*; 

public class stringTokenizer
{

public static void main (String [] args)
{


String questionData = "Who was the first US president#George Clooney#George             

    Washington#Washington Irving#Irving Berlin";

String delimiters = JOptionPane.showInputDialog ( "Enter a delimiter" );

StringTokenizer parser = new StringTokenizer ( questionData, delimiters );

System.out.println("\nThe string " + questionData+" has "+  

parser.countTokens()+ " tokens");
String input = " ";

input = JOptionPane.showInputDialog (parser.nextToken ( ) );

            while (!(input.equalsIgnoreCase("George Clooney") && input.equalsIgnoreCase("George Washington") && input.equalsIgnoreCase("Washington Irving") && input.equalsIgnoreCase("Irving Berlin")))
            {

                input = JOptionPane.showInputDialog (parser.nextToken ( ));

            }
if (input == "George Washington")

{
 System.out.println ("YAY! You know the first president of the United       

 States!");
}

else 

{
System.out.println ("Yer dumb...");
}
System.exit (0);
}
}
正在发生的是: 每个令牌都会打印到JOptionPane中。。。我只想把它放在一个JOptionPane中,但要看起来像:

Who was the first president?
George Clooney
George Washington
George Irving
Irving Berlin
像那样!我知道这是因为我正在使用“nextToken”,但我不知道该替换什么,不该替换什么


任何帮助都将不胜感激,谢谢

每次循环while循环时,您都在创建一个新的JOptionPane:

 while (!(input.equalsIgnoreCase("George Clooney") && input.equalsIgnoreCase("George Washington") && input.equalsIgnoreCase("Washington Irving") && input.equalsIgnoreCase("Irving Berlin")))
        {

            input = JOptionPane.showInputDialog (parser.nextToken ( ));

        }
这就是为什么会有多个弹出窗口,每次它们都有一条不同的消息,这是您的令牌之一。您对StringTokenizer的使用是正确的,显示它的逻辑让您感到厌烦。相反,尝试循环遍历所有标记以创建将出现在弹出窗口中的字符串,然后创建一次弹出窗口以获取输入,如下所示:

  StringBuilder display = new StringBuilder();
        int tokens = parser.countTokens();
        for(int i = 0; i < tokens; i++)
        {
            display.append(parser.nextToken() + "\r\n");
        }
        input = JOptionPane.showInputDialog (display.toString());
由于我们使用的是equalsIgnoreCase,我们应该在if语句中使用相同的方法,以查看问题是否得到正确回答:

    if (input.equalsIgnoreCase("George Washington"))

另外,请注意,我将while循环中的逻辑更改为或与之相反,因为我们希望while循环在每个循环返回false时继续运行,而不是在其中任何一个循环返回false时继续运行,并且所有循环前面的否定表示我们需要对所有可能性执行逻辑OR。

不是对您问题的回答,但我不明白你的教授为什么要教你
StringTokenizer
课。用Javadoc的话来说,“StringTokenizer是一个遗留类,出于兼容性原因保留了它,尽管在新代码中不鼓励使用它”。让你的教授意识到这一点可能是值得的,这样他/她就不会在这方面浪费你更多的时间。而且,
if(input==“George Washington”)
不会做你认为会做的事情。比较
String
对象的正确方法是使用
equals
方法。。。我不明白为什么一段时间的循环会把它切成碎片。我想要一件一件的。而且,它显然发生在while循环开始之前。
    if (input.equalsIgnoreCase("George Washington"))