尝试从csv文件读取一些复数。我有一个琴弦,正在尝试

ComplexFormat cf = new ComplexFormat();
cf.parse(entry)


此代码导致以下错误

org.apache.commons.math3.exception.MathParseException: illegal state: string "-7.5212e-06+3.4298e-06i" unparseable (from position 7) as an object of type org.apache.commons.math3.complex.Complex


我假设我需要使用NumberFormat创建一个新的复杂格式,该格式允许使用指数表示法,因为

cf.getRealFormat().useExponentialNotation = false


但是我不确定如何创建这样的NumberFormat。否则我想使用Double.parseDouble,但这将需要我考虑正确的正则表达式。

最佳答案

您的数据似乎包含带有小e的科学符号。令人讨厌的是,该库不会拦截,但是简单的替换将对您有帮助。

String entry = "-7.5212e-06+3.4298e-06i";
ComplexFormat cf = new ComplexFormat();
Complex c = cf.parse(entry.replace('e', 'E'));
System.out.println(c);
//(-0.075212, 0.034298)


但是请注意,如果您使用默认的构造函数(如上),则可以正确解析您的数字,但不再保留科学计数法。如果要保留表示法,请使用DecimalFormat:

DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.US);
DecimalFormat formatter = new DecimalFormat("##.####E0", symbols);
ComplexFormat cfWithE = new ComplexFormat(formatter);
Complex c2 = cfWithE.parse(entry.replace('e', 'E'));
System.out.println(c2);
//(-7.5212E-6, 3.4298E-6)

09-25 21:05