从JAVA字符串中提取复数

从JAVA字符串中提取复数,java,parsing,numbers,Java,Parsing,Numbers,我想从字符串形式的复杂表达式中提取数字。例如: Input: '2+3*i + 1-4*i + -2*i'. Output: 2 , 3 , 1, -4 , -2. 我尝试使用split(“-\+\\\\\*”解析它们,但是我丢失了负数的符号,有什么建议吗?我想在您的情况下使用Pattern和Matcher,如下所示: String str = "2+3i + 1-4i + -2i"; Pattern pattern = Pattern.compile("[-+]

我想从字符串形式的复杂表达式中提取数字。例如:

Input: '2+3*i + 1-4*i + -2*i'.
Output: 2 , 3 , 1, -4 , -2.

我尝试使用
split(“-\+\\\\\*”
解析它们,但是我丢失了负数的符号,有什么建议吗?

我想在您的情况下使用Pattern和Matcher,如下所示:

String str = "2+3i + 1-4i + -2i";
Pattern pattern = Pattern.compile("[-+]?\\d+");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
    System.out.println(matcher.group());
}

输出

2
+3
1
-4
-2

将“环视”添加到句柄,然后添加一个数字:

.split("(\\*i)? *((?<=\\d)(?=-)|-(?!\\d)|\\+|$) *")
环顾四周,断言,但不要消费,输入,这是您在这里需要的


我在正则表达式中添加了更多内容,以丢弃数字周围的内容。

如果希望在数组中获得匹配结果,则添加@YCF\u L的答案

import java.util.Arrays;
import java.util.regex.MatchResult;
import java.util.regex.Pattern;

public class Test {

    public static void main(String[] args) {
        String str = "2+3*i + 1-4*i + -2*i";
        String[] nums = Pattern.compile("(-?)\\d+")
                               .matcher(str)
                               .results()
                               .map(MatchResult::group)
                               .toArray(String[]::new);
        
        System.out.println(Arrays.toString(nums));
    }
}
然而,在这里,已经无法识别哪些数字分配给复数的实部,哪些分配给复数的虚部

如果要将数字设置为int而不是字符串:

int[] nums = Pattern.compile("(-?)\\d+")
                    .matcher(str)
                    .results()
                    .map(MatchResult::group)
                    .mapToInt(Integer::parseInt)
                    .toArray();

@谢谢你指出这一点。我把它修好了,但让它工作起来并不像我想象的那么容易。
import java.util.Arrays;
import java.util.regex.MatchResult;
import java.util.regex.Pattern;

public class Test {

    public static void main(String[] args) {
        String str = "2+3*i + 1-4*i + -2*i";
        String[] nums = Pattern.compile("(-?)\\d+")
                               .matcher(str)
                               .results()
                               .map(MatchResult::group)
                               .toArray(String[]::new);
        
        System.out.println(Arrays.toString(nums));
    }
}
int[] nums = Pattern.compile("(-?)\\d+")
                    .matcher(str)
                    .results()
                    .map(MatchResult::group)
                    .mapToInt(Integer::parseInt)
                    .toArray();