سؤال

ما هي أفضل طريقة لاستخراج الجزء عدد صحيح من سلسلة مثل

Hello123

كيف تحصل على الجزء 123. يمكنك نوع الاختراق باستخدام ماسحة جافا، هل هناك طريقة أفضل؟

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

المحلول

لماذا لا تستخدم مجرد تعبير منتظم لتتناسب مع جزء السلسلة التي تريدها؟

[0-9]

هذا كل ما تحتاجه، بالإضافة إلى أي char المحيط الذي يتطلبه.

ينظر الى http://www.regular-expressions.info/tutorial.html. لفهم مدى عمل التعبيرات العادية.

تحرير: أود أن أقول أن Regex قد تكون حجرية ساحقة قليلا لهذا المثال، إذا كان التعليمات البرمجية في الواقع أن المصدم الآخر يعمل ... ولكن ما زلت أوصي بتعلم Regex بشكل عام، لأنها قوية جدا و سيأتي في متناول يدي أكثر مما أرغب في الاعتراف به (بعد انتظار عدة سنوات قبل منحهم رصاصة).

نصائح أخرى

كما هو موضح من قبل، حاول استخدام تعبيرات منتظمة. هذا يجب أن يساعد:

String value = "Hello123";
String intValue = value.replaceAll("[^0-9]", ""); // returns 123

ثم عليك فقط تحويل ذلك إلى int (أو عدد صحيح) من هناك.

أعتقد أنك تستطيع أن تفعل شيئا مثل:

Scanner in = new Scanner("Hello123").useDelimiter("[^0-9]+");
int integer = in.nextInt();

تحرير: الإضافة الإستخدامات الإستخدامية اقتراح من كارلوس

على افتراض أنك تريد رقما زائدة، وهذا سيعمل:

import java.util.regex.*;

public class Example {


    public static void main(String[] args) {
        Pattern regex = Pattern.compile("\\D*(\\d*)");
        String input = "Hello123";
        Matcher matcher = regex.matcher(input);

        if (matcher.matches() && matcher.groupCount() == 1) {
            String digitStr = matcher.group(1);
            Integer digit = Integer.parseInt(digitStr);
            System.out.println(digit);            
        }

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

كنت أفكر في أن Michael's Regex كان أبسط حل ممكن، ولكن في الفكر الثاني فقط " d +" يعمل إذا كنت تستخدم Matcher.finder () بدلا من matcher.matches ():

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Example {

    public static void main(String[] args) {
        String input = "Hello123";
        int output = extractInt(input);

        System.out.println("input [" + input + "], output [" + output + "]");
    }

    //
    // Parses first group of consecutive digits found into an int.
    //
    public static int extractInt(String str) {
        Matcher matcher = Pattern.compile("\\d+").matcher(str);

        if (!matcher.find())
            throw new NumberFormatException("For input string [" + str + "]");

        return Integer.parseInt(matcher.group());
    }
}

على الرغم من أنني أعلم أنه سؤال عمره 6 سنوات، إلا أنني نشر إجابة لأولئك الذين يرغبون في تجنب تعلم Regex الآن (الذي يجب عليك أن تراجعه). هذا النهج يعطي أيضا الرقم بين الأرقام (على سبيل المثال HP123كتم567 سوف تعود 123567)

    Scanner scan = new Scanner(new InputStreamReader(System.in));
    System.out.print("Enter alphaNumeric: ");
    String x = scan.next();
    String numStr = "";
    int num;

    for (int i = 0; i < x.length(); i++) {
        char charCheck = x.charAt(i);
        if(Character.isDigit(charCheck)) {
            numStr += charCheck;
        }
    }

    num = Integer.parseInt(numStr);
    System.out.println("The extracted number is: " + num);
String[] parts = s.split("\\D+");    //s is string containing integers
int[] a;
a = new int[parts.length];
for(int i=0; i<parts.length; i++){
a[i]= Integer.parseInt(parts[i]);
System.out.println(a[i]);
} 
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top