为什么JOptionPane会打扰我的字符串?

时间:2011-09-06 21:00:22

标签: java arrays string casting joptionpane

我有一行类似于以下内容的代码:

final String food = 
    (String) JOptionPane.showInputDialog(this, "Choose a food", "Food",
                                         JOptionPane.QUESTION_MESSAGE, null,
                                         {"Pizza", "Hot Dog"}, "Pizza");

当我使用变量food时,我得到了字符串的一部分,还有一些我看不到的其他字符。我不确定发生了什么。有人能帮助我吗?

重现问题:

System.out.println(System.getenv("APPDATA") + File.separator + food + ".txt");

它应该打印这样的东西:

C:\Users\userName\AppData\Roaming\Pizza.txt

但实际上它给出了输出:

.txtsers\userName\AppData\Roaming\Pizza

3 个答案:

答案 0 :(得分:1)

错误必须在代码中的其他位置。

我刚刚运行了以下代码:

String[] options = {"Pizza", "Hot Dog"};

final String food = (String) JOptionPane.showInputDialog(null, "Choose a food", "Food", JOptionPane.QUESTION_MESSAGE, null, options, "Pizza");

System.out.println("'" + food + "'");

当我选择Pizza时,我在控制台上获得了 Pizza 。当我选择Hot Dog时,我得到了 Hot Dog

关于代码的其他部分。我跑了:

String[] options = {"Pizza", "Hot Dog"};

final String food = (String) JOptionPane.showInputDialog(null, "Choose a food", "Food", JOptionPane.QUESTION_MESSAGE, null, options, "Pizza");

StringBuilder sb = new StringBuilder();
sb.append(System.getenv("APPDATA"));
sb.append(File.separator);
sb.append(food);
sb.append(".txt");
System.out.println(sb.toString());

得到了 C:\我电脑上的某个文件夹\ Hot Dog.txt C:\我电脑上的某个文件夹\ Pizza.txt

答案 1 :(得分:0)

您的代码甚至无法编译,因为它需要Object []。尝试新的String [] {“Pizza”,“Hot Dog”}而不只是{“Pizza”,“Hot Dog”}

答案 2 :(得分:0)

一些Glassball猜测:

.txtsers\userName\AppData\Roaming\Pizza的输出看起来像是在你的字符串中有一个回车符(在.txt之前)。您可以使用以下代码重现这一点:

System.out.println("C:\\users\\userName\\AppData\\Roaming\\Pizza\r.txt");

问题是这个回车如何进入你的字符串。显然,你在问题中显示的代码并没有产生它。

创建一个short self contained compilable example (SSCCE),您可以在途中找到原因,也可以在此处发布时向我们展示(将其添加到问题中)。