JTextField - 数字分隔(ArrayList)

时间:2014-09-05 00:21:23

标签: java swing arraylist jtextfield

有没有办法使用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);
    }

2 个答案:

答案 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,这仍然会抛出一个解析异常。

更好的解决方案可能是使用JFormattedTextFieldJSpinner来收集单个值,并将每个值一次添加到一个列表中(可以在JList中显示它们) ,这将允许您在输入时验证每个值。

有关详细信息,请查看How to Use Formatted Text FieldsHow to Use SpinnersHow 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);
}