8 Uso de Java, que puede hacer:
String str = "There 0 are 1 some -2-34 -numbers 567 here 890 .";
int[] ints = Arrays.stream(str.replaceAll("-", " -").split("[^-\\d]+"))
.filter(s -> !s.matches("-?"))
.mapToInt(Integer::parseInt).toArray();
System.out.println(Arrays.toString(ints)); // prints [0, 1, -2, -34, 567, 890]
Si usted no tiene los números negativos, usted puede deshacerse de la replaceAll
(y use !s.isEmpty()
en filter
), ya que eso es solo para dividir correctamente algo como 2-34
(esto también se puede manejar puramente con expresiones regulares en split
, pero es bastante complicado).
Arrays.stream
convierte nuestro String[]
en un Stream<String>
.
filter
elimina las cadenas vacías iniciales y finales, así como cualquier -
que no forme parte de un número.
mapToInt(Integer::parseInt).toArray()
llama parseInt
en cada String
para darnos una int[]
.
Alternativamente, Java 9 tiene un método Matcher.results, lo que debería permitir algo así como:
Pattern p = Pattern.compile("-?\\d+");
Matcher m = p.matcher("There 0 are 1 some -2-34 -numbers 567 here 890 .");
int[] ints = m.results().map(MatchResults::group).mapToInt(Integer::parseInt).toArray();
System.out.println(Arrays.toString(ints)); // prints [0, 1, -2, -34, 567, 890]
En la actualidad, ninguno de ellos es una gran mejora con respecto a solo bucle a través de los resultados con Pattern
/Matcher
como se muestra en las otras respuestas, pero debería ser más simple si desea seguir con operaciones más complejas que se simplifican significativamente con el uso de transmisiones.
son números rodeados por espacios u otros caracteres? ¿Cómo se formatean los números, son hexadecimales, octales, binarios, decimales? –
Pensé que estaba claro por la pregunta: es una oración en inglés con números. Además, estaba hablando de una matriz de enteros, así que lo que estaba buscando eran enteros. –