Pergunta

Qual é a melhor maneira de extrair a parte inteira de uma corda como

Hello123

Como você consegue a parte 123. Você pode hackear usando o scanner de Java, existe uma maneira melhor?

Foi útil?

Solução

Por que você não usa apenas uma expressão regular para corresponder à parte da string que deseja?

[0-9]

É tudo o que você precisa, além de todos os que exigirem.

Olhe para http://www.regular-expressions.info/tutorial.html Para entender como as expressões regulares funcionam.

EDIT: Gostaria de dizer que Regex pode estar um pouco exagerado para este exemplo, se é de fato o código que o outro enviado publicou trabalhos ... mas eu ainda recomendo aprender em geral, pois são muito poderosos e Vai ser útil mais do que eu gostaria de admitir (depois de esperar vários anos antes de dar uma chance).

Outras dicas

Como explicado anteriormente, tente usar expressões regulares. Isso deve ajudar:

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

E então você apenas converte isso em um int (ou número inteiro) a partir daí.

Eu acredito que você pode fazer algo como:

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

EDIT: Adicionado sugestão de concessão usada por Carlos

Supondo que você queira um dígito à direita, isso funcionaria:

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

Eu estava pensando que o regex de Michael era a solução mais simples possível, mas, com o segundo pensamento, apenas " d+" funciona se você usar o matcher.find () em vez de 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());
    }
}

Embora eu saiba que é uma pergunta de 6 anos, mas estou postando uma resposta para aqueles que desejam evitar o aprendizado de Regex agora (o que você deve btw). Essa abordagem também fornece o número entre os dígitos (por exemplo, HP123Kt567 retornará 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]);
} 
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top