Я зараз займаюся проектом у своєму класі інформатики, і ми вважаємо, що ми маємо перевірку кожен символу змінної, щоб побачити, чи є вона законною абоні. Якщо він починається з числа, то це незаконно. Якщо він починається з особливого характеру, то він є легальним, але поганим. Якщо він має простір, це знову незаконно. Я опублікую свій поточний код зараз:
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.
Ось тут це відповідь, як це зробити.