2012-03-03 15 views
5

¿Alguien me puede aconsejar sobre un problema que me ha estado molestando? Tengo un archivo .jar de Java que devuelve una cadena de un método realizado de la siguiente manera:División de una cadena en Java

integer integer integer block_of_text 

Eso es tres enteros que pueden ser positivos o negativos, separados por espacios, y luego otro espacio antes de un bloque de texto que puede consistir en cualquier carácter pero que no debe contener retornos de carro. Ahora supongo que puedo leer una subcadena hasta el carácter de espacio para cada uno de los enteros iniciales y luego simplemente leer el texto restante de una vez.

Debo añadir que el bloque de texto no debe desglosarse independientemente de lo que contenga.

¿Pero alguien puede sugerir una mejor alternativa?

Gracias a los encuestados. ¡Esto me ha ahorrado un dolor de cabeza!

+0

¿Puede block_of_text contener caracteres de nueva línea? Más particularmente, '\ n' en Linux/OS X, o '\ r \ n' en Windows. Supongo que sí porque dijiste que cualquier personaje podría existir allí. –

+0

bloque de texto puede contener espacios? – sgowd

+0

Retornos de carro y saltos de línea - no. Espacios - sí. –

Respuesta

11

Usted puede utilizar el formulario de String#split(regex,limit) which takes a limit:

String s = "123 456 789 The rest of the string"; 
String ss[] = s.split(" ", 4); 
// ss = {"123", "456", "789", "The rest of the string"}; 
+0

No estaba al tanto de usar split como este. –

7

Puede utilizar String.split con el espacio como separador, y establecer un límite de 4:

String[] result = s.split(" ", 4); 

También es posible usar un Scanner. Esto no solo dividirá el texto, sino que también analizará los enteros en int. Dependiendo de si usted necesita los tres enteros como int o String, es posible encontrar este más conveniente:

Scanner scanner = new Scanner(s); 
int value1 = scanner.nextInt(); 
int value2 = scanner.nextInt(); 
int value3 = scanner.nextInt(); 
scanner.skip(" "); 
String text = scanner.nextLine(); 

ver su funcionamiento en línea: ideone.

+0

+1 para un uso conveniente del escáner. – maerics

3

Una manera simple (ya que dijo que no habrá nuevas líneas en block_of_text) es usar un Scanner. Es una herramienta para dividir los datos de entrada en función de un determinado delimitado, y devuelve los tipos apropiados a usted. Por ejemplo, puede usar los métodos hasNextInt() y nextInt() para buscar un número entero en la entrada y extraerlo de la transmisión.

Por ejemplo:

Scanner scanner = new Scanner(System.in); // Arg could be a String, another InputStream, etc 
int[] values = new int[3]; 
values[0] = scanner.nextInt(); 
values[1] = scanner.nextInt(); 
... 
String description = scanner.nextLine(); 

usted podría utilizar esto hasta que haya agotado el flujo de entrada, y comenzar a utilizar los valores como sea necesario.

Aquí hay más detalles sobre cómo utilizar Scanner: If ... is not an int {

0

La forma más simple de dividir la cadena es utilizar el método de split.

String gen = "some texts here"; 
String spt[] = gen.split(" "); //This will split the string gen around the spaces and stores them into the given string array 


Para eliminar los números enteros de acuerdo a su pregunta, inicie el índice de matriz de 3.
espero que esto ayudaría.

Cuestiones relacionadas