创建一个在java中划分字符串的方法

DMo*_*Mor 0 java math

我有一个名为: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)

而我正在试图找出如何编写适当的正则表达式.

Edw*_*rzo 6

备选方案1

这有点像这样?

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)

这将使第二个匹配组的标志成为一部分.

备选方案2

或者,如果您确定字符串格式正确并且您不关心虚构部分的歌唱,则可以执行以下操作:

Scanner sc = new Scanner(complexNum).useDelimiter("[i+-]");
int real = sc.nextInt();
int imag = sc.nextInt();
Run Code Online (Sandbox Code Playgroud)

哪个更简单.

备选方案3

如果您不确定字符串的格式,您仍然可以使用正则表达式来验证它:

if(complexNum.matches("(\\d+)[+-](\\d+)i")) {
  //scanner code here
} else {
   //throw exception or handle the case
}
Run Code Online (Sandbox Code Playgroud)

备选方案4

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)