文字列、「K2S 1W3333333」を経由保管しないように、また、それをより効率的にbreak
をしなければならなかったものを改善するために
固定ストリング長
:
Postal codes in Canadaのための基本的なルールのいくつかを読んだ後、以下のスニペット、特にライン
int len = postal.length();
if ((len == 7) && (postal.charAt(3) != ' '))
および/または...
} else if ((len != 6) && (len != 7)) {
を参照してください、ここでの有効性をチェックし、迅速抜粋です
public class App {
public static boolean checkCode(String postal) {
if (postal == null || postal.isEmpty()) {
System.out.println("Empty postal code");
return false;
}
int len = postal.length();
if ((len == 7) && (postal.charAt(3) != ' ')) {
System.out.println("Invalid postal code length (7 characters requires space in middle of code)");
return false;
} else if ((len != 6) && (len != 7)) {
System.out.println("Invalid postal code length (6 characters required)");
return false;
}
if (len == 7) {
postal = postal.replace(" ", "");
len = postal.length();
}
final char[] invalidUpLetters = { 'D', 'F', 'I', 'O', 'Q', 'U' };
final char[] invalidLowLetters = { 'd', 'f', 'i', 'o', 'q', 'u' };
for (int i = 0; i < len; ++i) {
final char c = postal.charAt(i);
if (i % 2 == 0) {
if (!Character.isLetter(c)) {
System.out.println("Invalid letter at postal code string index: " + i);
return false;
}
for (int j = 0; j < invalidUpLetters.length; ++j) {
if ((c == invalidUpLetters[j]) || (c == invalidLowLetters[j])) {
System.out.println("Invalid letter used in postal code, string index: " + i);
return false;
}
}
if ((i == 0) && (c == 'W' || c == 'w' || c == 'Z' || c == 'z')) {
System.out.println("First position letter cannot be W or Z");
return false;
}
} else if ((i % 2 == 1) && (!Character.isDigit(c))) {
System.out.println("Invalid digit at postal code string index: " + i);
return false;
}
}
return true;
}
public static void main(String[] args) {
args = new String[] { "K2S 1W3333333", "K2S 1W3", "K2S1W3" };
System.out.println("is valid postal? " + (checkCode(args[0]) ? "Yes" : "No"));
System.out.println("is valid postal? " + (checkCode(args[1]) ? "Yes" : "No"));
System.out.println("is valid postal? " + (checkCode(args[2]) ? "Yes" : "No"));
}
}
これは、それぞれのインデックスの文字/数字をチェックするロジックと、最初の文字が有効であるかどうか、また文字すべて一緒に除外されるはずです。スニペットには、6桁の郵便番号の中央にスペースを追加するかどうかのチェックも含まれています。キャラクターには注意してください!
checkCode()メソッドからSystem.out.println()を削除し、ブール値を使用することもできます。これはデバッグの一部をクリアしてコードを読みやすくするのに役立ちます。シンプルさ(文字列が有効なカナダの郵便番号であるかどうかをチェックするメソッドを使用するだけでよい)
編集:元の投稿に記載されている「K2S、1W3」などの入力郵便番号のバリエーションが増えている場合は、スニペットに表示されているとおりに文字を正規化/解析することを検討してください。
乾杯
正規表現の使用を検討しましたか?プログラミングに慣れていないようです。それがあなたの最善のアプローチです。これがクラス割り当てで正規表現を使用できない場合は、文字カウンタを維持する必要があります。 – mba12
'> = 65'、' <= 90', '> = 48'、 '<= 57'はしないでください。それは意図を不明瞭にする。 '> = 'A''、' <= 'Z'', '> =' 0''、 '<= '9''を使用してください。 – Andreas
@アンドレアス私は先生が私にそうしたいと思っています。 – JimmyJeans