Ich versuche ein Programm zu erstellen, das überprüft, ob die Seriennummern des Benutzers gültig sind oder nicht. Es sollte einem bestimmten Format entsprechen. Das Format sollte zwei Zahlen sein, gefolgt von einem Bindestrich, vier Zahlen, einem Punkt, dann vier Zahlen und zwei Zeichen (Hinweis: Zeichen akzeptiert sind nur a, b und c).Füllen eines bestimmten String-Formats mit Nullen, wenn es kürzer ist als die erforderliche Länge
Example valid format:
31-0001.2341ac
00-9999.0001cb
Wenn der Seriencode ungültig ist, weil es nicht die erforderliche Länge der Zeichenkette erfüllt hat, soll das Programm am Anfang mit Nullen füllen und der neue Code wird gedruckt.
Ich habe es geschafft, mit dem seriellen Code-Checker mit regulären Ausdrücken zu arbeiten, es überprüft nun korrekt, ob der Code gültig ist oder nicht. Ich finde es jedoch schwierig, wenn ein neuer Code für einen ungültigen Seriencode generiert werden muss. Es ist so, als müsste ich für alle möglichen Kombinationen hart codieren.
Ich habe versucht, diese How to format a Java string with leading zero?, aber ich habe eine harte Zeit, weil mein String-Format hat Strich & Punkt in der Mitte der Zeichenfolge.
Ich bin immer noch ziemlich neu, ich bin noch nicht vertraut mit utils oder Bibliotheken für solche Funktionen. Ich hoffe, dass jemand mir helfen kann, meinen Code zu reparieren, um es einfacher und effizienter zu machen.
import java.util.Scanner;
public class SerialCheck {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("How many serial numbers would you like to check: ");
int length = sc.nextInt();
int valid = 0;
String[] sSerials = new String[length];
for (int nCtr = 0; nCtr < length; nCtr++) {
System.out.print("Enter Serial " + (nCtr + 1) + ": ");
sSerials[nCtr] = sc.next();
}
System.out.println();
System.out.println("The following were added: ");
for (int nCtr = 0; nCtr < length; nCtr++) {
System.out.println(sSerials[nCtr]);
}
System.out.println();
System.out.println("Comments\t" + "New Code");
for (int nCtr = 0; nCtr < length; nCtr++) {
boolean isValid = sSerials[nCtr].matches("[0-9]{2}-[0-9]{4}\\.[0-9]{4}[abc0-9]{2}");
boolean isMissing = sSerials[nCtr].matches("[0-9]{2}-[0-9]{4}\\.[0-9]{1}[abc0-9]{2}") ||
sSerials[nCtr].matches("[0-9]{2}-[0-9]{4}\\.[0-9]{2}[abc0-9]{2}") ||
sSerials[nCtr].matches("[0-9]{2}-[0-9]{4}\\.[0-9]{3}[abc0-9]{2}");
boolean isMissing1 = sSerials[nCtr].matches("[0-9]{2}-[0-9]{1}\\.[0-9]{4}[abc0-9]{2}") ||
sSerials[nCtr].matches("[0-9]{2}-[0-9]{2}\\.[0-9]{4}[abc0-9]{2}") ||
sSerials[nCtr].matches("[0-9]{2}-[0-9]{3}\\.[0-9]{4}[abc0-9]{2}");
boolean isMissing2 = sSerials[nCtr].matches("[0-9]{0}-[0-9]{4}\\.[0-9]{4}[abc0-9]{2}") ||
sSerials[nCtr].matches("[0-9]{1}-[0-9]{4}\\.[0-9]{4}[abc0-9]{2}");
if (isValid) {
System.out.println("Valid\t\t" + sSerials[nCtr]);
} else if (isMissing) {
System.out.println("Invalid\t\t" + sSerials[nCtr].substring(0, 8) + "0000".substring(0, 14 - sSerials[nCtr].length()) + sSerials[nCtr].substring(8));
} else if (isMissing1) {
System.out.println("Invalid\t\t" + sSerials[nCtr].substring(0, 3) + "0000".substring(0, 14 - sSerials[nCtr].length()) + sSerials[nCtr].substring(3));
} else if (isMissing2) {
System.out.println("Invalid\t\t" + sSerials[nCtr].substring(0, 0) + "00".substring(0, 14 - sSerials[nCtr].length()) + sSerials[nCtr].substring(0));
} else {
System.out.println("Invalid\t");
}
}
}
}
@Andrew schnelle Frage, um die Anforderungen zu klären. Wenn jemand die ungültige Seriennummer '2341ac 'eingibt, möchten Sie, dass Ihr Programm' 00-0000.2341ac', '000000002341ac' oder etwas anderes erzeugt? Wenn Sie eine Frage genau angeben könnten, würde das mir helfen, präzise zu antworten. Ich glaube, ich bekomme, wonach Sie fragen, aber ich möchte es bestätigen. – entpnerd
@entpnerd, wenn sie 2341ac eingeben, sollte es 00-0000 sein.2341ac – Andrew
Zur Zeit funktioniert mein Programm so, als würde ich versuchen, alle möglichen Kombinationen zu finden, bei denen der Benutzer eine Ziffer an irgendeinem Teil der Zeichenkette verfehlen könnte, und einfach einfach zu Beginn Nullen auffüllen. So sucht Im gerade für eine andere Lösung .. – Andrew