コードのどこが間違っているのかを理解しようとして、頭を悩ませています。ユーザーに次の形式を挿入するように求めています。
LeftOperand operator RightOperand
どこ:
- LeftOperand - 任意の int または float 数値にすることができます
- 演算子 - +、-、*、または / を指定できます
- RightOperand - 任意の int または float 数値にすることができます
3 +/-/*// 5
検索していくつかの正規表現を見つけましたが、次のもの以外はエラーを返すため、それらはすべてうまくいかないようです。有効である必要があります:
- 1 + 3
- 1 / 4
- 1.3 - 4
- 4 - 5.3
- 123 * 3434
- 12.34 * 485
しかし、実際にはそれらだけが有効で、残りはエラーを返します:
- 1 + 3 - 正解
- 1 / 4 - 正しい
- 1.3 - 4 - エラー
- 4 - 5.3 - エラー
- 123 * 3434 - エラー
- 12.34 * 485 - エラー
現在、コードで次の正規表現を使用しています。
"[((\\d+\\.?\\d*)|(\\.\\d+))] [+,\\-,*,/] [((\\d+\\.?\\d*)|(\\.\\d+))]"
あらゆる種類の正規表現を試しましたが、どれもうまくいかないようで、何が間違っているのかわかりません:
[[+-]?([0-9]*[.])?[0-9]] [+,\-,*,/] [[+-]?([0-9]*[.])?[0-9]]
これは私のクライアントコードです:
private static final int SERVER_PORT = 8080;
private static final String SERVER_IP = "localhost";
private static final Scanner sc = new Scanner(System.in);
private static final String regex = "[((\\d+\\.?\\d*)|(\\.\\d+))] [+,\\-,*,/] [((\\d+\\.?\\d*)|(\\.\\d+))]";
public static void main(String[] args) throws IOException {
// Step 1: Open the socket connection
Socket serverSocket = new Socket(SERVER_IP, SERVER_PORT);
// Step 2: Communication-get the input and output stream
DataInputStream dis = new DataInputStream(serverSocket.getInputStream());
DataOutputStream dos = new DataOutputStream(serverSocket.getOutputStream());
//Run until Client decide to disconnect using the exit phrase
while (true) {
// Step 3: Enter the equation in the form -
// "operand1 operation operand2"
System.out.print("Enter the equation in the form: ");
System.out.println("'operand operator operand'");
String input = sc.nextLine();
// Step 4: Checking the condition to stop the client
if (input.equals("exit"))
break;
//Step 4: Check the validity of the input and
// return error message when needed
if (input.matches(regex)) {
System.out.println("Expression is correct: " + input);
} else {
System.out.println("Expression is incorrect, please try again: ");
continue;
}
// Step 5: send the equation to server
dos.writeUTF(input);
// Step 6: wait till request is processed and sent back to client
String ans = dis.readUTF();
// Step 7: print the response to the console
System.out.println("Answer=" + Double.parseDouble(ans));
}
}