جافا، تأكد من أن سلسلة تحتوي فقط على الأبجدية الرقمية والمساحات والشرطات

StackOverflow https://stackoverflow.com/questions/749742

  •  09-09-2019
  •  | 
  •  

سؤال

في جاوة، أحتاج إلى التأكد من أن سلسلة تحتوي فقط alphanumeric, space و dash الشخصيات.

لقد وجدت الفصل org.apache.commons.lang.StringUtils والطريقة الكافية تقريبا isAlphanumericSpace(String)... ولكن أحتاج أيضا إلى تضمين شرطات.

ما هي أفضل طريقة للقيام بذلك؟ لا أريد استخدام تعبيرات منتظمة.

هل كانت مفيدة؟

المحلول

همهمة ... فقط برنامجها بنفسك باستخدام string.chatat.(إتجاه)، إنه سهل جدا ...

تكرار من خلال الكل شار في السلسلة باستخدام مؤشر موضع، ثم قارنه باستخدام حقيقة أن أحرف ASCII من 0 إلى 9، A إلى Z و A إلى Z استخدم رموز متتالية، لذلك تحتاج فقط إلى التحقق من تلك الحرف x يتحقق عدديا أحد الشروط:

  • بين "0" و "9"
  • بين "A" و "Z"
  • بين "أ و"
  • مساحة ' '
  • واصلة '-'

فيما يلي عينة رمز أساسي (باستخدام الأخطاء الختامية، مما يتيح لك تمرير سلسلة ولكن أيضا StringBuilder ك Arg):

public boolean isValidChar(CharSequence seq) {
    int len = seq.length();
    for(int i=0;i<len;i++) {
        char c = seq.charAt(i);
        // Test for all positive cases
        if('0'<=c && c<='9') continue;
        if('a'<=c && c<='z') continue;
        if('A'<=c && c<='Z') continue;
        if(c==' ') continue;
        if(c=='-') continue;
        // ... insert more positive character tests here
        // If we get here, we had an invalid char, fail right away
        return false;
    }
    // All seen chars were valid, succeed
    return true;
}

نصائح أخرى

يمكنك استخدام:

StringUtils.isAlphanumericSpace(string.replace('-', ' '));

تكرر فقط من خلال السلسلة، باستخدام أساليب الطبقة الشخصية في java.lang.character لاختبار ما إذا كانت كل حرف مقبولة أم لا. والذي يفترض أن كل ما تفعله طرق Stringutils، والتعبيرات العادية هي مجرد وسيلة للقيادة بمحرك معمم للقيام بنفس الشيء.

لديك 1 من 2 خيارات: 1. إنشاء قائمة من الأحرف التي يمكن أن تكون في السلسلة، ثم حلقة على التحقق من السلسلة للتأكد من كل حرف في القائمة. 2. إنشاء قائمة بالأحرف التي لا يمكن أن تكون في السلسلة، ثم الحلقة على فحص السلسلة للتأكد من أن كل حرف ليس في القائمة.

اختر أي خيار أسرع لإنشاء القائمة.

بالتأكيد استخدام تعبير regex. لا يوجد نقطة كتابة نظامك الخاص عند وجود نظام شامل للغاية لهذه المهمة الدقيقة. إذا كنت بحاجة إلى معرفة أو فرشاة على Regex ثم تحقق من هذا الموقع، فهذا رائع: http://regexr.com

أود أن أتحدى نفسك في هذا واحد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top