1

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

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
4

3 回答 3

0

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

我刚刚运行了以下代码:

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());

在我的计算机 \Hot Dog.txtC:\some 文件夹中获得了 C:\some 文件夹在我的计算机\Pizza.txt中。

于 2011-09-06T21:17:45.527 回答
0

您的代码甚至无法编译,因为它需要一个 Object[]。尝试 new String[] {"Pizza", "Hot Dog"} 而不仅仅是 {"Pizza", "Hot Dog"}

于 2011-09-09T12:28:28.240 回答
0

一些玻璃球猜测:

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

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

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

创建一个简短的自包含可编译示例 (SSCCE),您将在途中找到原因,或者我们可以在您将其发布到此处时向您展示(将其添加到问题中)。

于 2011-09-12T23:53:48.007 回答