Trova tutti i numeri nella stringa

Ad esempio, ho input String: ” qwerty1qwerty2 “;

Come risultato vorrei che [1,2] .

La mia attuale implementazione qui sotto:

import java.util.ArrayList; import java.util.List; public class Test1 { public static void main(String[] args) { String inputString = args[0]; String digitStr = ""; List digits = new ArrayList(); for (int i = 0; i < inputString.length(); i++) { if (Character.isDigit(inputString.charAt(i))) { digitStr += inputString.charAt(i); } else { if (!digitStr.isEmpty()) { digits.add(Integer.parseInt(digitStr)); digitStr = ""; } } } if (!digitStr.isEmpty()) { digits.add(Integer.parseInt(digitStr)); digitStr = ""; } for (Integer i : digits) { System.out.println(i); } } } 

Ma dopo il doppio controllo disempio i punti di coppia:

  1. Alcune righe di codice si ripetono due volte.

  2. Io uso Elenco. Penso che non sia una buona idea, meglio usare l’array.

Allora, cosa ne pensate?

Potresti fornire qualche consiglio?

Usa RepalceAll

 String str = "qwerty1qwerty2"; str = str.replaceAll("[^0-9]+", " "); System.out.println(Arrays.asList(str.trim().split(" "))); 

Produzione:

 [1, 2] 

[MODIFICARE]

Se vuoi includere - ae meno, aggiungi -? :

 String str = "qwerty-1qwerty-2 455 f0gfg 4"; str = str.replaceAll("[^-?0-9]+", " "); System.out.println(Arrays.asList(str.trim().split(" "))); 

Produzione:

 [-1, -2, 455, 0, 4] 

Descrizione

 [^-?0-9]+ 
  • + Tra una e più volte, il più volte ansible, restituire secondo necessità
  • -? Uno dei personaggi “-?”
  • 0-9 Un carattere nell’intervallo tra “0” e “9”
 import java.util.regex.Matcher; import java.util.regex.Pattern; ... Pattern pattern = Pattern.compile("[0-9]+"); Matcher matcher = pattern.matcher("test1string1337thingie"); // Find all matches while (matcher.find()) { // Get the matching string String match = matcher.group(); } 

È una soluzione regexp.

prova questo codice

 String s = "qwerty1qwerty2"; for(int i=0;i