variable una manejo entero declarar convertir caracteres cambiar cadenas cadena java arrays char data-conversion

java - manejo - Convertir una cadena con espacios y números a una matriz int con solo números



manejo de cadenas en java (6)

Quiero convertir String lotto en una matriz de enteros. La lotería de cadenas se compone de una cierta cantidad de números entre 1 y 99 y está compuesta únicamente por números de 1 y 2 dígitos. (Ejemplo: String lotto podría verse como "1 34 5 23 7 89 32 4 10 3 6 5").

Estoy tratando de resolver el problema convirtiendo el String en char [] y luego el char [] en un int []. Mi lógica detrás de la conversión a la char [] es que permite formatear los números para int [].

Esto es lo que tengo hasta ahora:

public static int[] conversion(String lotto) { char[] c = lotto.toCharArray(); int[] a = new int[c.length]; for(int i = 0, j = 0; i < c.length; i++) { if(c[i] != '' '' && c[i+1] != '' '') { a[j] = c[i] + c[i+1]; i+=2; j++; } else if(c[i] != '' '' && c[i+1] == '' '') { a[j] = c[i]; i++; j++; } } return a; }//end of conversion method

Todavía estoy trabajando en el resto del programa, pero sé que c [i] + c [i + 1] devuelve un valor ASCII o un int diferente en lugar de combinar los dos caracteres juntos (Ejemplo de lo que quiero: ''3 ''+'' 4 ''= 34)

¿Cómo soluciono este problema?


Diversión con Java 1.8 ... una línea:

int[] nums = Pattern.compile("//s") .splitAsStream("1 34 5 23 7 89 32 4 10 3 6 5") .mapToInt(Integer::valueOf) .toArray();

¿Quieres ordenar la matriz int? Aún una línea:

int[] nums = Pattern.compile("//s") .splitAsStream("1 34 5 23 7 89 32 4 10 3 6 5") .mapToInt(Integer::valueOf) .sorted() .toArray();


Dividir la String contiene los números

String str = "1 2 33 64"; String[] numbers = str.split(" ");

Cree un int[] del mismo tamaño que String[] :

int[] array = new int[numbers.length];

Pasa por los numbers , analiza cada valor y lo almacena en el int[] :

for(int i = 0; i < numbers.length; i++) array[i] = Integer.parseInt(numbers[i]);


Intenta usar String.split

String numbers[] = lotto.split (" ");


Si no te importa convertir a una matriz de caracteres, entonces solo puedes usar el método .split ()

String[] nums = lotto.split(" "); int[] a = new int[nums.length]; for(int i = 0; i < a.length; i++) { a[i] = Integer.parseInt(nums[i]); } return a;


Usando la función de split cadenas, puede dividir la cadena por espacios como estos:

string[] lottoArray = lotto.split(" ");

Luego, puede recorrer la matriz y poner los valores en una matriz int:

int[] numbersArray = new int[lottoArray.length]; for (int i = 0; i < lottoArray.length; i++) numbersArray[i] = Integer.parseInt(lottoArray[i]);


Yo lo haría así:

public static int[] string2array(String s) { return util1(s, 0, 0, false); } private static int[] util1(String s, int n, int l, boolean b) { if (s.isEmpty()) { return b ? util2(l, n, new int[l + 1]) : new int[l]; } if (Character.isWhitespace(s.charAt(0))) { return b ? util2(l, n, util1(s.substring(1), 0, l + 1, false)) : util1(s.substring(1), 0, l, false); } return util1(s.substring(1), n * 10 + Character.digit(s.charAt(0), 10), l, true); } private static int[] util2(int idx, int value, int[] array) { array[idx] = value; return array; }

Resultado de Arrays.toString(string2array("1 34 5 23 7 89 32 4 10 3 6 5")) es

[1, 34, 5, 23, 7, 89, 32, 4, 10, 3, 6, 5]

http://ideone.com/NCpOQc