Cijfers extraheren uit string – StringUtils Java

Ik heb een string en ik wil de (enige) reeks cijfers in de string extraheren.

Voorbeeld:
halloThisIsA1234Sample.
Ik wil de 1234

Het is een gegeven dat de reeks cijfers slechts één keer voorkomt binnen de tekenreeks, maar niet op dezelfde positie.

(voor degenen die ernaar vragen, ik heb een servernaam en moet daar een specifiek nummer uithalen)

Ik wil graag de StringUtils-klasse van Apache-commomns gebruiken.

Bedankt!


Antwoord 1, autoriteit 100%

Gebruik dit codenummerAlleen bevat de gewenste uitvoer.

  String str="sdfvsdf68fsdfsf8999fsdf09";
   String numberOnly= str.replaceAll("[^0-9]", "");

Antwoord 2, autoriteit 20%

Ik gebruik altijd graag Guava String-hulpprogramma’sof iets dergelijks voor dit soort aantal problemen:

String theDigits = CharMatcher.inRange('0', '9').retainFrom("abc12 3def"); // 123

Antwoord 3, autoriteit 14%

Slechts één regel:

int value = Integer.parseInt(string.replaceAll("[^0-9]", ""));

Antwoord 4, autoriteit 7%

U kunt ook java.util.Scannergebruiken:

new Scanner(str).useDelimiter("[^\\d]+").nextInt()

Je kunt next()gebruiken in plaats van nextInt()om de cijfers als een Stringte krijgen. Merk op dat het aanroepen van Integer.parseIntop het resultaat vele malen snellerkan zijn dan het bellen met nextInt().

U kunt de aanwezigheid van een nummer controleren met hasNextInt()op de Scanner.


Antwoord 5, autoriteit 4%

Gebruik een regex zoals [^0-9]om alle niet-cijfers te verwijderen.

Gebruik vanaf daar gewoon Integer.parseInt(String);


Antwoord 6, autoriteit 2%

probeer dit:

String s = "helloThisIsA1234Sample";
s = s.replaceAll("\\D+","");

Dit betekent: vervang alle exemplaren van digitale karakters (0 -9) door een lege string !


Antwoord 7, autoriteit 2%

Guava’s CharMatcherklasse extraheert Integers uit een String.

String text="Hello1010";
System.out.println(CharMatcher.digit().retainFrom(text));

Opbrengsten:

1010

Antwoord 8, autoriteit 2%

Ik heb een JUnit Test-klasse gemaakt (als aanvullende kennis/info) voor hetzelfde probleem. Ik hoop dat je hier wat aan hebt.

  public class StringHelper {
    //Separate words from String which has gigits
        public String drawDigitsFromString(String strValue){
            String str = strValue.trim();
            String digits="";
            for (int i = 0; i < str.length(); i++) {
                char chrs = str.charAt(i);              
                if (Character.isDigit(chrs))
                    digits = digits+chrs;
            }
            return digits;
        }
    }

En JUnit Testcase is:

public class StringHelperTest {
    StringHelper helper;
        @Before
        public void before(){
            helper = new StringHelper();
        }
        @Test
    public void testDrawDigitsFromString(){
        assertEquals("187111", helper.drawDigitsFromString("TCS187TCS111"));
    }
 }

Antwoord 9

U kunt de volgende reguliere expressie gebruiken.

string.split(/ /)[0].replace(/[^\d]/g, '')

Antwoord 10

       String line = "This order was32354 placed for QT ! OK?";
        String regex = "[^\\d]+";
        String[] str = line.split(regex);
        System.out.println(str[1]);

Antwoord 11

U kunt str = str.replaceAll("\\D+","");


Antwoord 12

U kunt de tekenreeks splitsen en vergelijken met elk teken

public static String extractNumberFromString(String source) {
    StringBuilder result = new StringBuilder(100);
    for (char ch : source.toCharArray()) {
        if (ch >= '0' && ch <= '9') {
            result.append(ch);
        }
    }
    return result.toString();
}

Testcode

   @Test
    public void test_extractNumberFromString() {
    String numberString = NumberUtil.extractNumberFromString("+61 415 987 636");
    assertThat(numberString, equalTo("61415987636"));
    numberString = NumberUtil.extractNumberFromString("(02)9295-987-636");
    assertThat(numberString, equalTo("029295987636"));
    numberString = NumberUtil.extractNumberFromString("(02)~!@#$%^&*()+_<>?,.:';9295-{}[=]987-636");
    assertThat(numberString, equalTo("029295987636"));
}

Antwoord 13

Probeer deze benadering als u symbolen hebt en u wilt alleen nummers:

   String s  = "@##9823l;Azad9927##$)(^738#";
    System.out.println(s=s.replaceAll("[^0-9]", ""));
    StringTokenizer tok = new StringTokenizer(s,"`~!@#$%^&*()-_+=\\.,><?");
    String s1 = "";
    while(tok.hasMoreTokens()){
        s1+= tok.nextToken();
    }
    System.out.println(s1);

Antwoord 14

Een zeer eenvoudige oplossing, indien gescheiden door komma of indien niet gescheiden door komma

public static void main(String[] args) {
    String input = "a,1,b,2,c,3,d,4";
    input = input.replaceAll(",", "");
    String alpha ="";
    String num = "";
    char[] c_arr = input.toCharArray();
    for(char c: c_arr) {
        if(Character.isDigit(c)) {
            alpha = alpha + c;
        }
        else {
            num = num+c;
        }
    }
    System.out.println("Alphabet: "+ alpha);
    System.out.println("num: "+ num);
}

Antwoord 15

Uitbreiding van het beste antwoord voor het vinden van drijvende puntennummers

      String str="2.53GHz";
       String decimal_values= str.replaceAll("[^0-9\\.]", "");
       System.out.println(decimal_values);

Antwoord 16

  `String s="as234dfd423";
for(int i=0;i<s.length();i++)
 {
    char c=s.charAt(i);``
    char d=s.charAt(i);
     if ('a' <= c && c <= 'z')
         System.out.println("String:-"+c);
     else  if ('0' <= d && d <= '9')
           System.out.println("number:-"+d);
    }

Uitgang: –

number:-4
number:-3
number:-4
String:-d
String:-f
String:-d
number:-2
number:-3

Antwoord 17

U kunt dit proberen:

 String str="java123java456";
  String out="";
  for(int i=0;i<str.length();i++)
  {
    int a=str.codePointAt(i);
     if(a>=49&&a<=57)
       {
          out=out+str.charAt(i);
       }
   }
 System.out.println(out);

Antwoord 18

Eenvoudige Python-code voor het scheiden van de cijfers in string

 s="rollnumber99mixedin447"
  list(filter(lambda c: c >= '0' and c <= '9', [x for x in s]))

Other episodes