Domanda

Qual è il modo migliore per estrarre la parte intera di una stringa come

Hello123

Come si ottiene la parte 123. È possibile sorta di hack usando scanner di Java, c'è un modo migliore?

È stato utile?

Soluzione

Perché non basta usare un'espressione regolare per abbinare la parte della stringa che si desidera?

[0-9]

Questo è tutto ciò che serve, oltre a tutto ciò che circonda i caratteri che richiede.

http://www.regular-expressions.info/tutorial.html per capire come funzionano le espressioni regolari.

Edit: Vorrei dire che Regex può essere un po 'fuori bordo per questo esempio, se davvero il codice che l'altro mittente pubblicato opere ... ma mi piacerebbe ancora vivamente l'apprendimento Regex di in generale, perché molto sono potente, e sarà utile più di quanto mi piacerebbe ammettere (dopo aver atteso diversi anni prima di dare loro un colpo).

Altri suggerimenti

Come spiegato in precedenza, provare a utilizzare espressioni regolari. Questo dovrebbe dare una mano:

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

E poi basta convertire che per un int (o Integer) da lì.

Io credo che si può fare qualcosa di simile:

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

EDIT: Aggiunto useDelimiter suggerimento da Carlos

Supponendo che si desidera una cifra finale, questo dovrebbe funzionare:

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.");
    }
}

Avevo pensato regex di Michael era possibile la soluzione più semplice, ma ripensandoci solo "\ d +" funziona se si utilizza Matcher.find () al posto di 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());
    }
}

Anche se so che si tratta di una domanda di 6 anni, ma sto inviando una risposta a coloro che vogliono evitare di imparare regex in questo momento (che si dovrebbe btw). Questo approccio dà anche il numero tra le cifre (per es. HP 123 KT 567 restituirà 123.567)

    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]);
} 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top