2009-10-07 10 views
55

Mam długi ciąg. Jakie jest wyrażenie regularne, aby podzielić liczby na tablicę?Jak usunąć znak nienumeryczny z łańcucha znaków w java?

+0

1. Napisz przykładowy ciąg znaków 2. Czy ciąg znaków lub tablica lub tablica ciągów znaków (ciąg [])? 2. Co chcesz? po prostu usuń znak nieliczbowy z ciągu lub usuń go i uzyskaj tablicę zawierającą liczby – eveliotc

+2

Proszę, wyjaśnij to pytanie. Niektóre wskaźniki: Pokaż ciąg znaków wejściowych i wynik ciągu. Wykonaj drugie zdanie, aby było to trochę bardziej wyjaśniające. Czy masz wiele numerów rozdzielonych przez cyfry? Lub każda cyfra powinna być podzielona? –

Odpowiedz

137

Czy usuwasz lub dzielisz? Spowoduje to usunięcie wszystkich nie-numerycznych znaków.

myStr = myStr.replaceAll("[^\\d]", "") 
+4

'myStr = myStr.replaceAll (" [\\ D] "," ");' –

+10

Wersja bez nawiasów kwadratowych: 'myStr.replaceAll (" \\ D + "," ")', może bardziej czytelna. – Adil

6

Będziemy chcieli, aby użyć klasy string Split() metodę i przekazać w sposób regularny wyrażenia «\ D +», który będzie pasował przynajmniej jeden inny niż numer.

myString.split("\\D+"); 
+0

Spowoduje to usunięcie wszystkich znaków numerycznych i wyświetlenie tablicy z wszystkimi liczbami nienumerycznymi. Jest dokładnie odwrotnością żądanego. – tangens

+1

Ups, musiałem źle zinterpretować pytanie. W takim przypadku byłaby to negowana wersja regex, która jest \\ D + Zaktualizuję odpowiedź! –

20

Jeszcze podejście do usuwania wszystkie znaki nienumeryczne z ciągiem:

String newString = oldString.replaceAll("[^0-9]", ""); 
+1

Działa również pod 'gawk'. – Hastur

0

Działa to w Flex SDK 4.14.0

myString.replace (/ [^ 0-9 & & ^.]/G, "");

+2

Proszę dodać objaśnienie do kodu – KhorneHoly

0

można użyć metody rekurencyjnej jak poniżej:

public static String getAllNumbersFromString(String input) { 
     if (input == null || input.length() == 0) { 
      return ""; 
     } 
     char c = input.charAt(input.length() - 1); 
     String newinput = input.substring(0, input.length() - 1); 

      if (c >= '0' && c<= '9') { 
      return getAllNumbersFromString(newinput) + c; 

     } else { 
      return getAllNumbersFromString(newinput); 
     } 
    } 
0

prosty sposób bez użycia wyrażenia regularnego:

public static String getOnlyNumerics(String str) { 
    if (str == null) { 
     return null; 
    } 
    StringBuffer strBuff = new StringBuffer(); 
    char c; 
    for (int i = 0; i < str.length() ; i++) { 
     c = str.charAt(i); 
     if (Character.isDigit(c)) { 
      strBuff.append(c); 
     } 
    } 
    return strBuff.toString(); 
} 
6

Innym regex rozwiązanie:

string.replace(/\D/g,''); 
+0

To działało dla napisów javascript, dzięki! – jlafay

2

Java 8 collection streams:

StringBuilder sb = new StringBuilder(); 
test.chars().mapToObj(i -> (char) i).filter(Character::isDigit).forEach(sb::append); 
System.out.println(sb.toString()); 
Powiązane problemy