从字符串JAVA中提取复数



我想从一个以字符串形式给出的复杂表达式中提取数字。示例:

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

如果您想在数组中获得匹配结果,请添加@YCF_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();

添加查找以处理减号后的数字:

.split("(\*i)? *((?<=\d)(?=-)|-(?!\d)|\+|$) *")

观看现场演示,显示

System.out.println(Arrays.toString(
"2+3*i + 1-4*i + -2*i"
.split("(\*i)? *((?<=\d)(?=-)|-(?!\d)|\+|$) *")
));

输出所需的结果(也使用项之间的减号进行测试(:

[2, 3, 1, -4, -2]

环视断言但不消耗输入,这正是您所需要的。

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

最新更新