如何将字符串拆分为仅正整数和负整数?

5 java string split

我正在编写一个程序来使用向量函数进行不同的计算,但是我现在拥有的程序界定了负数。我尝试过使用不同的分隔符,但似乎无法找到正确的分隔符。

有谁知道分割字符串时如何保留正数和负数?另外,有没有办法保留任何小数值?.45 将返回 45,.29 将返回 29

这是代码:

ArrayList<Integer> list = new ArrayList<Integer>();

String twoVectors = "a=<-1,2,-3> b=<4,-5,6>"; // vector and a and b

String[] tokens = twoVectors.split("\\D");

for (String s : tokens)
    if (!s.equals(""))
        list.add(Integer.parseInt(s));

System.out.println(Arrays.toString(list.toArray()));
Run Code Online (Sandbox Code Playgroud)

当我运行该程序时,我得到 [1, 2, 3, 4, 5, 6] 而不是 [-1, 2, -3, 4, -5, 6]。我所有的功能都工作得很好,但在使用负值时不起作用。

任何帮助,将不胜感激。

Pav*_*ngh 3

您可以使用

    String[] tokens = twoVectors.split("[^\\d-]+");
Run Code Online (Sandbox Code Playgroud)

[^\\d-]+:匹配除数字之外的任何内容-

[] :匹配里面提到的所有内容[]

^ : 否定表示不匹配 ( \\d-)

\\d- : 数字0-9-字符

正则表达式演示


    String twoVectors = "a=<-1,2,-3> b=<4,-5,6>";

    ArrayList<Integer> list = new ArrayList<Integer>();

    String[] tokens = twoVectors.split("[^\\d-]");

    for (String s : tokens)
        if (!s.equals(""))
            list.add(Integer.parseInt(s));

    System.out.println(Arrays.toString(list.toArray()));
Run Code Online (Sandbox Code Playgroud)

输出 :

[-1, 2, -3, 4, -5, 6]
Run Code Online (Sandbox Code Playgroud)

或者

您可以使用Patternwithmatcher来查找所有所需的值,即带-?\\d+正则表达式的有符号或无符号数字

Regex Demo -?\d+


更新: 对于Double值,您可以使用[^\\d-.]+并确保使用Double而不是IntegerDouble.parseDouble

并与PatternMatcher使用-?\\d*\\.?\\d+