Overeenkomen met het patroon van een tekenreeks in Java

Ik heb geprobeerd om erachter te komen hoe ik het patroon van mijn invoerreeks kan vergelijken met dit soort tekenreeks:

"xyz 123456789"

Over het algemeen moet elke keer als ik een invoer heb met de eerste 3 tekens (zowel hoofdletters als kleine letters) en de laatste 9 cijfers (elke combinatie) de invoerreeks worden geaccepteerd.

Dus als ik i/p string = "Abc 234646593" heb, zou het een overeenkomst moeten zijn (een of twee toegestane witte ruimte). Het zou ook geweldig zijn als "Abc" en "234646593" in afzonderlijke reeksen zouden worden opgeslagen.

Ik heb veel regex gezien maar begrijp het niet volledig.

1
Een inleiding tot reguliere expressies in Java vindt u hier: docs.oracle.com/javase/handleiding/essentieel/regex
toegevoegd de auteur Nick Garvey, de bron
Je kunt regexes niet leren door willekeurig naar voorbeelden te kijken. Neem de tijd voor diepgaand leren in één taal en pas deze later toe op vergelijkbare syntaxen in andere talen.
toegevoegd de auteur user unknown, de bron

1 antwoord

Hier is een werkende Java-oplossing:

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

public class Regex {
  public static void main(String[] args) {
    String input = "Abc 234646593";

   //you could use \\s+ rather than \\s{1,2} if you only care that
   //at least one whitespace char occurs
    Pattern p = Pattern.compile("([a-zA-Z]{3})\\s{1,2}([0-9]{9})");
    Matcher m = p.matcher(input);
    String firstPart = null;
    String secondPart = null;
    if (m.matches()) {
      firstPart = m.group(1); //grab first remembered match ([a-zA-Z]{3})
      secondPart = m.group(2);//grab second remembered match ([0-9]{9})
      System.out.println("First part: " + firstPart);
      System.out.println("Second part: " + secondPart);
    }
  }
}

Drukt af:

First part: Abc
Second part: 234646593
4
toegevoegd
Ik koos \\ s {1,2} omdat in de vraag stond "een of twee witte spaties toegestaan", dus ik was streng om hem te laten zien hoe het moest. Normaal zou ik \\ s + gebruiken als ik er alleen maar om geef dat er ten minste één witruimteteken is en daarna elk nummer.
toegevoegd de auteur quux00, de bron
Als een kleine notitie, met zo'n code, is het meestal beter/niet/om firstPart en secondPart te initialiseren. Op die manier, als u het later in de code per ongeluk zou verwijzen zonder het een juiste waarde te geven, zal die fout worden opgevangen tijdens compileertijd in plaats van runtime.
toegevoegd de auteur Nick Garvey, de bron
@ midpeter444: Ik begrijp het, ik had het mis. Nu vraag ik me af waarom ik het niet heb gezien, maar dat is natuurlijk niet interessant voor iemand anders, daarom heb ik mijn opmerking verwijderd. Sorry.
toegevoegd de auteur user unknown, de bron