有没有办法使用JTextField获取几个不同的数字?
例如,给出以下数值:2.0,3.0,4.0。我想将它们分别放入ArrayList中。
如何处理错误的输入数据以继续输入?
//in this case the resulst is "arList: 1.92239991"
textField = new JTextField("1.9, 223, 9991");
textField.addActionListener(this);
ArrayList<Double> arList = new ArrayList<>();
String str = textField.getText();
String result = str.replaceAll("\\s+","");
String otherResult = result.replaceAll(",","");
double d = Double.parseDouble(otherResult);
System.out.println(d);
arList.add(d);
for (Double anArList : arList) {
System.out.println("arList: " +anArList);
}
答案 0 :(得分:2)
如果数字始终以,
分隔,则可以使用String#split
,这将返回一组值。
String str = textField.getText();
String[] parts = str.split(",");
这将返回,
之间的每个值,包括空格。然后你可以修剪这些结果......
for (int index = 0; index < parts.length; index++) {
parts[index] = parts[index].trim();
}
现在只包含剩余的文字。如果你必须在列表中有它,你可以使用...
List<String> values = Arrays.asList(parts);
如果你需要它作为Double
的列表,你将需要单独解析每个元素......
List<Double> values = new ArrayList<Double>(parts.length);
for (String value : values) {
values.add(Double.parseDouble(value));
}
如果任何一个值不是有效的Double
,这仍然会抛出一个解析异常。
更好的解决方案可能是使用JFormattedTextField
或JSpinner
来收集单个值,并将每个值一次添加到一个列表中(可以在JList
中显示它们) ,这将允许您在输入时验证每个值。
有关详细信息,请查看How to Use Formatted Text Fields,How to Use Spinners和How to Use Lists
答案 1 :(得分:1)
如果格式是固定的,那么你可以使用String.split():
String text = "1.9, 223, 9991";
for (String s: text.split("\\,\\s")) {
double d = Double.parseDouble(s);
System.out.println(d);
}