实名感谢尚梦川大佬教会我正则表达式!!!!!!!!!!!!!!!!!!!!!!!!!!

输入的必须是正确答案,主要是尝试正则表达式。 看不懂的童邪慎用。优化也不是特别好,但是看懂了比较舒服。

有错误欢迎指正

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Complextest {
	public float real,vir;
	public static int count=0;
	public static String Input()
	{
		Scanner in = new Scanner(System.in);
				count++;
		System.out.println("请输入第"+count+"个复数:");
		String res= in.next();
		return res;
	}
		public Complextest (String str)
		{
			if(str.equals("i")||str.equals("+i"))
			{
				this.real=0;
				this.vir =1;
			}
			else if(str.equals("-i"))
			{
				this.real=0;
				this.vir =-1;
			}
			else{
			String a = "^([-+]?)(\\d+|\\d+\\.\\d+)$";//只有实部的匹配
			String bi =   "^([-+]?)(\\d+|\\d+\\.\\d+)?(i+)$";//只虚部的匹配
			String a_bi = "^([-+]?)(\\d+|\\d+\\.\\d+)([-+]+)(\\d+|\\d+\\.\\d+)(i+)$";//实部虚部都有
			String a_i =  "^([-+]?)(\\d+|\\d+\\.\\d+)([-+]+)(i+)$";
			Pattern fora = Pattern.compile(a);
			Pattern forbi = Pattern.compile(bi);
			Pattern fora_bi = Pattern.compile(a_bi);
			Pattern fora_i = Pattern.compile(a_i);
			Matcher toa= fora.matcher(str);
			Matcher tobi= forbi.matcher(str);
			Matcher toa_bi= fora_bi.matcher(str);
			Matcher toa_i= fora_i.matcher(str);
			if(toa_i.find())//([-+]?)(\\\\d+|\\\\d+\\\\.\\\\d+)([-+]+)(i+)
			{
				this.real = Float.parseFloat(toa_i.group(1)+toa_i.group(2));
				this.vir = 1;
				if(toa_i.group(3).equals("-"))
				{
					this.vir*=-1;
				}
			}
			if(toa.find())//只匹配实部
			{
				this.real = Float.parseFloat(toa.group(0));
				this.vir = 0;
			}else if(tobi.find())//只匹配虚部"([-+]?)(\\d+|\\d+\\.\\d+)(i+)";
			{
			
				this.real=0;
				this.vir=Float.parseFloat(tobi.group(1)+tobi.group(2));
			}
			if(toa_bi.find())//([-+]?)(\\d+|\\d+\\.\\d+)([-+]+)(\\d+|\\d+\\.\\d+)(i+)
			{
				
				this.real = Float.parseFloat(toa_bi.group(1)+toa_bi.group(2));
				if(toa_bi.group(4).length()==0)
				{
					this.vir=1;
					if(toa_bi.group(3)=="+")
					{
						this.vir*=-1;
					}
				}else {
					this.vir=Float.parseFloat(toa_bi.group(3)+toa_bi.group(4));
				}
			}
			}
			System.out.print("你输入的复数:");
			sayResult(this.real,this.vir);
		}
		public void add(Complextest other)//加法
		{
			float sum_Real,sum_Vir;
			sum_Real=this.real+other.real;
			sum_Vir=this.vir+other.vir;
			System.out.print("和:");
			sayResult(sum_Real,sum_Vir);
		}
		public void lenth(Complextest other)//长度
		{
			float x_len,y_len;
			x_len=this.real-other.real;
			y_len=this.vir-other.vir;
			System.out.println("长度是"+String.format("%.2f", Math.sqrt(x_len*x_len+y_len*y_len)));
		}
		public boolean equls(Complextest other)
		{
			System.out.print("是否相等:");
			return this==other||Math.abs(this.real-other.real)<0.001&&Math.abs(this.vir-other.vir)<0.001;
		}
		public void diff(Complextest other)//减法
		{
			float diff_Real,diff_Vir;
			diff_Real=this.real-other.real;
			diff_Vir=this.vir-other.vir;
			System.out.print("差:");
			sayResult(diff_Real,diff_Vir);
		}
		public void sayResult(float Real_,float Vir_)
		{
			StringBuffer put = new StringBuffer();
			String str=String.valueOf(Real_);
			if(Real_!=0)//实部存在
			{
				put.append(str);
				if(Vir_!=0)//等于0就不管
				{
					if(Vir_>0)
					{
						if(Vir_==1)//虚部为1
						{
							put.append("+i");
						}else {
							put.append("+"+Vir_+"i");
						}
					} else if(Vir_<0)
					{
						if(Vir_==-1)//虚部为-1
						{
							put.append("-i");
						}else {
							put.append(Vir_+"i");
						}
					}
				}
			}else//不存在实部
			{
				if(Vir_!=0)//只有虚部
				{
					if(Vir_==-1)
					{
						put.append("-i");
					}else if(Vir_==1)
					{
						put.append("i");
					}else
					{
						put.append(Vir_+"i");
					}
				}else//虚部都没有
				{
					put.append("0");
				}
			}
			System.out.println(put);
		}
		public static void main(String[] args) {
			String str;
			str = Input(); 
			Complextest first = new Complextest(str); 
		   	str = Input(); 
		    Complextest second = new Complextest(str);	
			first.add(second);
			first.diff(second);
			first.lenth(second);
			System.out.println(first.equls(second));
		}
}