Java בדוק מחרוזת עבור אותיות קטנות / אותיות רישיות, תו מיוחד וספרה

1. סקירה כללית

במדריך מהיר זה נמחיש כיצד אנו יכולים לבדוק אם א חוּט מכיל לפחות אחד מכל אחד מהבאים: אות גדולה, אות קטנה, ספרה או תו מיוחד ב- Java.

2. שימוש בביטויים רגולריים

אחת הדרכים לבצע את הבדיקה שלנו היא באמצעות ביטויים רגולריים. כדי להכיר ביטויים רגולריים, אנא עיין במאמר זה.

ראשית, בואו נגדיר את הביטוי הרגולרי לכל אחת מקבוצות הדמויות הנדרשות. מאחר וביטויים רגולריים קבועים, אין צורך להעריך אותם בכל ריצה, ולכן נרכיב אותם לפני שנשווה נגדם:

דפוס סופי סטטי פרטי [] inputRegexes = דפוס חדש [4]; סטטי {inputRegexes [0] = Pattern.compile (". * [A-Z]. *"); inputRegexes [1] = תבנית.קומפילציה (". * [a-z]. *"); inputRegexes [2] = תבנית.קומפילציה (". * \ ד. *"); inputRegexes [3] = תבנית.קומפילציה (". * [` [מוגן באמצעות הדוא"ל] # $% ^ & * () \ -_ = + \ | \ [{\]};: '\ " , /?]. * ");}

כמו כן, עלינו ליצור שיטה פשוטה בה נשתמש כדי לבדוק אם שלנו חוּט תואם את התנאים:

פרטי בוליאני סטטי פרטי isMatchingRegex (קלט מחרוזת) {inputMatches בוליאני = נכון; עבור (תבנית inputRegex: inputRegexes) {אם (! inputRegex.matcher (קלט) .matches ()) {inputMatches = false; }} להחזיר inputMatches; }

2.1. ביטוי רגיל יחיד

הדוגמה הקודמת די קריאה ומאפשרת לנו להשתמש רק בחלק מהדפוסים בקלות במידת הצורך. אבל, במקרה שדואג לנו רק למלא את כל התנאים, הרבה יותר יעיל להשתמש בביטוי רגולרי אחד.

בדרך זו לא נזדקק לחסימה סטטית כדי לאתחל ולהרכיב את כל הביטויים המרובים שלנו. כמו כן, לא יהיה צורך לחזור על כולם ולמצוא אילו התאמות ואילו לא.

כל שעלינו לעשות הוא להכריז על ה- regex שלנו:

מחרוזת regex = "^ (? =. *? \ p {Lu}) (? =. *? \ p {Ll}) (? =. *? \ d)" + "(? =. *? [`[אימייל מוגן] # $% ^ & * () \ -_ = + \ | \ [{\]};: '\", /?]). * $ ";

ואז הידור והשווה אותו:

@Test הציבור בטל givenSingleRegex_whenMatchingCorrectString_thenMatches () {String validInput = "Ab3;"; assertTrue (Pattern.compile (regex) .matcher (validInput) .matches ()); }

יש כמה דברים שעלינו לציין בנוגע לביטוי הקבוע שלנו.

ראשית, השתמשנו במראה חיובי חיובי (? = X) לכל קבוצת דמויות. זה אומר שאנחנו מצפים איקס למצוא אחרי תחילת המחרוזת (מסומן ב ^) כדי להתאים, אבל אנחנו לא רוצים ללכת לסוף איקס, אלא אנחנו רוצים להישאר בתחילת השורה.

דבר נוסף שיש לשים לב אליו הוא שהפעם לא השתמשנו בו [A-Z] אוֹ [a-z] לקבוצות אותיות, אבל \ p {Lu} ו \ p {Ll} במקום זאת. אלה יתאימו לכל סוג של אות (במקרה שלנו, אותיות גדולות וקטנות בהתאמה) מכל שפה, לא רק אנגלית.

3. שימוש ב- Core Java

בואו נראה כעת כיצד אנו יכולים לבצע את אותה בדיקה אם איננו רוצים להשתמש בביטויים רגולריים. ננצל אופי ו חוּט שיעורים ושיטות שלהם כדי לבדוק אם כל הדמויות הנדרשות קיימות בתוכניות שלנו חוּט:

check בוליאני סטטי פרטיString (קלט מחרוזת) {String specialChars = "~` [email protected] # $% ^ & * () -_ = + \ | [{]};: '\ ", /?"; char currentCharacter ; מספר בוליאני Present = false; בוליאני upperCasePresent = false; בוליאני lowerCasePresent = false; בוליאני specialCharacterPresent = false; עבור (int i = 0; i <input.length (); i ++) {currentCharacter = input.charAt (i); if ( Character.isDigit (currentCharacter)) {numberPresent = true;} else if (Character.isUpperCase (currentCharacter)) {upperCasePresent = true;} else if (Character.isLowerCase (currentCharacter)) {lowerCasePresent = true;} else if (specialChars. מכיל (String.valueOf (currentCharacter))) {specialCharacterPresent = true;}} return numberPresent && upperCasePresent && lowerCasePresent && specialCharacterPresent;}

עלינו לציין כמה דברים כאן. הרעיון הבסיסי הוא שאנחנו חוזרים באמצעות שלנו חוּט ובדוק אם תוויו הם מסוגים נדרשים. על ידי שימוש ב אופי בכיתה, אנו יכולים לבדוק בקלות אם תו מסוים הוא ספרה, אות גדולה או אות קטנה.

למרבה הצער, אין שיטה דומה שתגיד לנו אם אנו מתמודדים עם אחת הדמויות המיוחדות. אז זה אומר שאנחנו צריכים לנקוט בגישה אחרת.

יצרנו חוּט המכיל את כל התווים המיוחדים הדרושים לנו ואז בדק אם הוא מכיל את האופי הספציפי שלנו.

4. מסקנה

במאמר מהיר זה, הראינו כיצד לבדוק אם א חוּט מכיל תווים נדרשים. בתרחיש הראשון, השתמשנו בביטויים רגולריים ואילו בשני ניצלנו שיעורי ליבה של Java.

כרגיל, ניתן למצוא קוד מקור מלא ב- GitHub.