获取字符串并在arraylists

时间:2016-12-08 19:20:38

标签: java string arraylist

我几乎是java的初学者,即使在谷歌搜索之后我也无法弄清楚如何做到这一点。 所以,我正在制作一个基本的计算器,它将从用户那里得到一个字符串,并存储它的值......(我甚至不知道如何解释这个) 例如:用户的输入是“5 + 3-6 * 2”...我想在列表中存储5,3,6和2,并按照它们的顺序存储在另一个中的操作符号键入...(然后我将尝试按顺序执行操作,但这不是这个问题)。 我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

ArrayList<Character> nums = new ArrayList<>();
ArrayList<Character> ops = new ArrayList<>();
for (int i = 0; i < expression.length(); ++i) {
  char c = expression.charAt(i);
  if (c >= '0' && c <= '9') nums.add(c);
  else ops.add(c);
}

任何更复杂的事情,你需要调查解析器或正则表达式

我还想指出,假设每个数字都是1位数,如您的示例所示。

答案 1 :(得分:0)

这是一个解决问题的简单方法,在我将数字和运算符分成两个列表之后,我使用了一个列表来存储每个东西

  1. 1st将第一个字符放入列表中:
  2. 如果总统值size - 1是数字
  3. ,则进行2次迭代测试
  4. 如果是数字则(oldNumber * 10)+ newNumber
  5. 就是这样

    这应该可以帮到你:

    public static void main(String args[]) {
        String operation = "55*6-66-33+15/99";
        ArrayList<String> list = new ArrayList<>();
    
        for (int i = 0; i < operation.length(); i++) {
            if (!list.isEmpty()) {
                if (operation.charAt(i) >= '0' && operation.charAt(i) <= '9') {
                    String str = list.get(list.size() - 1);
                    if (testInteger(str)) {
                        int d = Integer.parseInt(str);
                        int d2 = Integer.parseInt(operation.charAt(i) + "");
                        String s = (d * 10 + d2) + "";
                        list.set(list.size() - 1, s);
                    } else {
                        list.add(operation.charAt(i) + "");
                    }
                } else {
                    list.add(operation.charAt(i) + "");
                }
            } else {
                list.add(operation.charAt(i) + "");
            }
        }
    

    现在,您可以在两个列表中分隔您的号码和操作

        List<Integer> listNumber = new ArrayList<>();
        List<String> listOperation = new ArrayList<>();
    
        for (String s : list) {
            if (testInteger(s)) {
                listNumber.add(Integer.parseInt(s));
            } else {
                listOperation.add(s);
            }
        }
        System.out.println(listNumber);
        System.out.println(listOperation);
    }
    

    如果聊天是数字,则此方法测试:

    private static boolean testInteger(String str) {
        try {
            int d = Integer.parseInt(str);
        } catch (NumberFormatException e) {
            return false;
        }
        return true;
    }
    

    结果应该是这样的:

    Principal list = [55, *, 6, -, 66, -, 33, +, 15, /, 99]
    List of numbers = [55, 6, 66, 33, 15, 99]
    List of operations = [*, -, -, +, /]
    
      

    如果您愿意,可以最小化代码,但这可以给您提供想法。