如何扫描以这种形式插入的数字:java中的1.7 + 2.8990i?我想可以用+或 - 来分割线一次。我应该如何将这一行作为一个字符串或其他?
由于
答案 0 :(得分:3)
如果你想使用一个库,总会有Commons Math让你做这样的事情:
ComplexFormat cf = new ComplexFormat();
Complex c = cf.parse("1.110 + 2.222i");
Complex second = new Complex(2.0, 5.0);
Complex answer = c.log(); // natural logarithm.
answer = c.cos(); // cosine
answer = c.pow(second); // first raised to the power of second
ComplexFormat format = new ComplexFormat(); // default format
String s1 = format.format(c); // s1 contains "1.110 + 2.222i"
String s2 = format.format(second); // s2 contains "2.0 + 5.0i"
答案 1 :(得分:1)
这是一个RegEx方法(没有外部库,但也不能使用复数而不仅仅是解析):
Pattern pattern = Pattern.compile("([+-]?\\d*\\.\\d+)([+-]?\\d*\\.\\d+)i",Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
Matcher matcher = pattern.matcher("1.7+2.8990i");
if(matcher.matches()) {
System.out.println("a:" + Float.parseFloat(matcher.group(1)));
System.out.println("b:" + Float.parseFloat(matcher.group(2)));
} else {
System.out.println("Not a complex number");
}
此方法支持a和b的正值和负值。现在,这种方法的一个弱点是它不能容忍数字周围的空格(你可以安全地从输入中去除空格而不改变方程式)。