2

この形式で挿入された番号をスキャンするにはどうすればよいですか:Javaで1.7 + 2.8990i?+、または-で行を1回分割することは可能だと思いますか?この行を文字列または他の文字列としてどのように取得する必要がありますか?

ありがとう

4

2 に答える 2

3

ライブラリを使用したい場合は、次のようなことを実行できるCommonsMathが常にあります。

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"
于 2012-12-06T19:41:37.170 に答える
1

正規表現のアプローチは次のとおりです(外部ライブラリはありませんが、解析以外の目的で複素数を使用することもできません)。

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の正と負の値をサポートします。このアプローチの弱点の1つは、数値の前後のスペースを許容しないことです(入力からスペースを安全に削除し、方程式を変更しないでください)。

于 2012-12-06T23:54:57.013 に答える