/ / Як виправити код Java для перевірки змінних? - java, char

Як виправити код Java для перевірки змінних? - java, char

Я зараз займаюся проектом у своєму класі інформатики, і ми вважаємо, що ми маємо перевірку кожен символу змінної, щоб побачити, чи є вона законною абоні. Якщо він починається з числа, то це незаконно. Якщо він починається з особливого характеру, то він є легальним, але поганим. Якщо він має простір, це знову незаконно. Я опублікую свій поточний код зараз:

import java.util.Scanner;

public class classOfValidation {

public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
String theVariable = null;

System.out.println("This program checks the validity of variables");
System.out.println("Please enter a variable (or press "q" to quit");

theVariable = scan.nextLine();

do {
System.out.println("The variable is illegal");
theVariable = scan.nextLine();
} while (theVariable.startsWith("[0123456789]"));

do {
System.out.println("The variable is illegal");
theVariable = scan.nextLine();
} while (theVariable.contains("[ ]"));

do {
System.out.println("The variable is legal, but has bad style");
theVariable = scan.nextLine();
} while (theVariable.startsWith("[!@#$%^&*]"));
}
}

Якщо ви вже не могли сказати, що я новачок у програмуванні, і як заплутаний, як я, можливо, може бути. Якщо у вас є які-небудь поради або що-небудь ще, ви повинні мені пояснити, то, будь ласка, залиште коментар. Дякую всім

Відповіді:

1 для відповіді № 1

Ви можете використовувати сингл regex , щоб підтвердити вхід через String#matches() метод. Але як для прикладу, який ви надали, ви повинні використовувати while петля, але не do-while, тому що в do while випадку, ви завжди запускаєте його "тіло одного разу, якщо для перевірки стану. Таким чином, вам краще зробити це, як:

theVariable = scan.nextLine();

while (theVariable.startsWith("[0123456789]")) {
System.out.println("The variable is illegal");
theVariable = scan.nextLine();
}

while (theVariable.contains("[ ]")) {
System.out.println("The variable is illegal");
theVariable = scan.nextLine();
}

while (theVariable.startsWith("[!@#$%^&*]")) {
System.out.println("The variable is legal, but has bad style");
theVariable = scan.nextLine();
}

Друге, у вашому рішенні, ви використовуєте String.startsWith() Метод і передача в нього деякого регулярного виразу. Подивись на javadoc для цього методу. Там сказано:

Перевіряє, чи починається цей рядок із вказаним префіксом.

Це означає, що цей метод не підтримуєрегулярні вирази, але просто перевіряє, чи починається рядок з пропущеним рядком. Отже, ваші умови, здається, ніколи не стануть справжніми. Я не думаю, що хтось буде вводити [0123456789] або [!@#$%^&*].

Ще один, будь-які умови перевіряються один раз, але після цього користувач може змінити вхідний сигнал і попередньо пропущений стан не буде перевірятися знову. Здається, краще зіткнутися з нескінченним циклом continue і break в деяких умовах, наприклад:

 //infinit loop, until user enter the `q` or the input is correct
while (true) {

//read the input
theVariable = scan.nextLine();

//chtck, whether is `quit` command entered
if ("q".equals(theVariable)) {
break;
}

//if string starts with digit or contains some whitespaces
//then print alert and let the user to
//modify the input in a new iteration
if (theVariable.matches("^d+.*|.*s+.*")) {
System.out.println("The variable is illegal");
continue;
}

//if string contains some special characters print alert
//and let the user to modify the input in a new iteration
if (theVariable.matches("^[!@#$%^&*].*")) {
System.out.println("The variable is legal, but has bad style");
continue;
}

//if all the conditions checked, then break the loop
break;
}

0 для відповіді № 2

Я думаю, що найкращий спосіб, якщо ви використовуєте regex.

Ось тут це відповідь, як це зробити.