immutable - string in java شرح



كيف يمكنني معرفة ما إذا كان أول حرف لسلسلة هو رقم؟ (4)

في Java ، توجد طريقة لمعرفة ما إذا كان أول حرف لسلسلة هو رقم؟

طريقة واحدة هي

string.startsWith("1")

وفعل ما سبق حتى 9 ، ولكن هذا يبدو غير فعال للغاية.


Answer #1

التعبيرات العادية هي أداة قوية جدًا ولكنها باهظة الثمن. إنه صالح لاستخدامها للتحقق مما إذا كان الحرف الأول رقمًا ولكنه ليس أنيقًا للغاية: أفضل هذه الطريقة:

public boolean isLeadingDigit(final String value){
    final char c = value.charAt(0);
    return (c >= '0' && c <= '9');
}

Answer #2

جرب هذا الكود سيساعدك :)

import java.io.*;

public class findDigit
{
    public findDigit()
    {
            String line = "1Hello";
            String firstLetter = String.valueOf(line.charAt(0)); //line had 0 to 5 string index
            char first = firstLetter.charAt(0);
             /*
             if (Character.isLetter(first)) //for alphabets
             if (Character.isSpaceChar(first)) //for spaces
            */
            if (Character.isDigit(first))  // for Digits
            {
                int number = Integer.parseInt(firstLetter);
                System.out.println("This String has digit at first as: "+number);
            }
            else
            {
                System.out.println("This String has alphabet at first as: "+firstLetter);
            }

    }

    public static void main(String args[])
    {
        new findDigit();
    }
}

Answer #3
Character.isDigit(string.charAt(0))

لاحظ أن هذا سيسمح بأي رقم Unicode ، وليس 0-9 فقط. قد تفضل:

char c = string.charAt(0);
isDigit = (c >= '0' && c <= '9');

أو حلول regex أبطأ:

s.substring(0, 1).matches("\\d")
// or the equivalent
s.substring(0, 1).matches("[0-9]")

ومع ذلك ، مع أي من هذه الطرق ، يجب أولاً التأكد من أن السلسلة ليست فارغة. إذا كان كذلك ، charAt(0) و substring(0, 1) بإلقاء StringIndexOutOfBoundsException . startsWith ليس لديه هذه المشكلة.

لجعل الحالة بأكملها سطرًا واحدًا وتجنب إجراء عمليات فحص للطول ، يمكنك تغيير العبارات المعتادة التالية:

s.matches("\\d.*")
// or the equivalent
s.matches("[0-9].*")

إذا لم تظهر الحالة في حلقة ضيقة في برنامجك ، فمن غير المحتمل أن يكون الأداء الصغير الذي تم الحصول عليه لاستخدام التعبيرات العادية ملحوظًا.


Answer #4
regular expression starts with number->'^[0-9]' 
Pattern pattern = Pattern.compile('^[0-9]');
 Matcher matcher = pattern.matcher(String);

if(matcher.find()){

System.out.println("true");
}




string