我有一个名为:ComplexNumber的类,我有一个字符串,我需要转换为ComplexNumber(使用Java).
如果我有:"5 + 3i"或"6-2i",我该如何适当地解析这些字符串.我需要将它变为2个变量,我可以完成其余的工作.
String complexNum = "5+3i";
Run Code Online (Sandbox Code Playgroud)
我需要将前一个字符串拆分为两个double类型变量double real = 5;
double imag = 3;
String complexNum = "6-2i";
Run Code Online (Sandbox Code Playgroud)
我需要将前一个字符串拆分为两个double类型变量double real = 6; double imag = -2;
任何人都可以提供示例代码,了解他们将如何做到这一点?没有任何空间可用作分隔符,我不完全理解正则表达式(我已经阅读了一堆教程,但它仍然没有点击)
编辑:
如果正则表达式是最好的选择,我很难理解如何创建一个合适的表达式.
我准备了以下代码:
String num = "5+2i";
String[] splitNum = num.split();
Run Code Online (Sandbox Code Playgroud)
而我正在试图找出如何编写适当的正则表达式.
这有点像这样?
String complexNum = "5+3i";
String regex = "(\\d+)[+-](\\d+)i";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(complexNum);
if(matcher.find()){
int real = Integer.parseInt(matcher.group(1));
int imag = Integer.parseInt(matcher.group(2));
}
Run Code Online (Sandbox Code Playgroud)
如果需要设置数字的符号部分,请将正则表达式更改为
String regex = "(\\d+)([+-]\\d+)i"
Run Code Online (Sandbox Code Playgroud)
这将使第二个匹配组的标志成为一部分.
或者,如果您确定字符串格式正确并且您不关心虚构部分的歌唱,则可以执行以下操作:
Scanner sc = new Scanner(complexNum).useDelimiter("[i+-]");
int real = sc.nextInt();
int imag = sc.nextInt();
Run Code Online (Sandbox Code Playgroud)
哪个更简单.
如果您不确定字符串的格式,您仍然可以使用正则表达式来验证它:
if(complexNum.matches("(\\d+)[+-](\\d+)i")) {
//scanner code here
} else {
//throw exception or handle the case
}
Run Code Online (Sandbox Code Playgroud)
String[] tokens = complexNum.split("[i+-]");
int real = Integer.parseInt(tokens[0]);
int imag = Integer.parseInt(tokens[1]);
System.out.println(real + " " + imag);
Run Code Online (Sandbox Code Playgroud)