Java: ¿cómo dividir una cadena por una cantidad de caracteres?

Traté de buscar en línea para resolver esta pregunta, pero no encontré nada.

Escribí el siguiente código abstracto para explicar lo que estoy preguntando:

String text = "how are you?"; String[] textArray= text.splitByNumber(4); //this method is what I'm asking textArray[0]; //it contains "how " textArray[1]; //it contains "are " textArray[2]; //it contains "you?" 

El método splitByNumber divide la cadena “texto” cada 4 caracteres. ¿Cómo puedo crear este método?

Muchas gracias

Creo que lo que él quiere es tener una cadena dividida en subcadenas de tamaño 4. Entonces lo haría en un ciclo:

 List strings = new ArrayList(); int index = 0; while (index < text.length()) { strings.add(text.substring(index, Math.min(index + 4,text.length()))); index += 4; } 

Usando Guava :

 Iterable result = Splitter.fixedLength(4).split("how are you?"); String[] parts = Iterables.toArray(result, String.class); 

¿Qué tal una expresión regular?

 public static String[] splitByNumber(String str, int size) { return (size<1 || str==null) ? null : str.split("(?< =\\G.{"+size+"})"); } 

Consulte Cadena dividida para subcadenas de igual longitud en Java

Quick Hack

 private String[] splitByNumber(String s, int size) { if(s == null || size < = 0) return null; int chunks = s.length() / size + ((s.length() % size > 0) ? 1 : 0); String[] arr = new String[chunks]; for(int i = 0, j = 0, l = s.length(); i < l; i += size, j++) arr[j] = s.substring(i, Math.min(l, i + size)); return arr; } 

Usando simples primitivos java y bucles.

 private static String[] splitByNumber(String text, int number) { int inLength = text.length(); int arLength = inLength / number; int left=inLength%number; if(left>0){++arLength;} String ar[] = new String[arLength]; String tempText=text; for (int x = 0; x < arLength; ++x) { if(tempText.length()>number){ ar[x]=tempText.substring(0, number); tempText=tempText.substring(number); }else{ ar[x]=tempText; } } return ar; } 

Uso: String ar[]=splitByNumber("nalaka", 2);

Prueba esto

  String text = "how are you?"; String array[] = text.split(" "); 

O puede usarlo a continuación

 List list= new ArrayList(); int index = 0; while (index 

No creo que haya una solución lista para usar, pero haría algo como esto:

 private String[] splitByNumber(String s, int chunkSize){ int chunkCount = (s.length() / chunkSize) + (s.length() % chunkSize == 0 ? 0 : 1); String[] returnVal = new String[chunkCount]; for(int i=0;i 

El uso sería:

 String[] textArray = splitByNumber(text, 4); 

EDITAR: la subcadena en realidad no debe superar la longitud de la cuerda.

Esta es la solución más simple que podría pensar … intente esto

 public static String[] splitString(String str) { if(str == null) return null; List list = new ArrayList(); for(int i=0;i < str.length();i=i+4){ int endindex = Math.min(i+4,str.length()); list.add(str.substring(i, endindex)); } return list.toArray(new String[list.size()]); } 

Prueba esta solución,

 public static String[]chunkStringByLength(String inputString, int numOfChar) { if (inputString == null || numOfChar < = 0) return null; else if (inputString.length() == numOfChar) return new String[]{ inputString }; int chunkLen = (int)Math.ceil(inputString.length() / numOfChar); String[]chunks = new String[chunkLen + 1]; for (int i = 0; i <= chunkLen; i++) { int endLen = numOfChar; if (i == chunkLen) { endLen = inputString.length() % numOfChar; } chunks[i] = new String(inputString.getBytes(), i * numOfChar, endLen); } return chunks; } 

Aquí hay una implementación sucinta usando las transmisiones Java8:

 String text = "how are you?"; final AtomicInteger counter = new AtomicInteger(0); Collection strings = text.chars() .mapToObj(i -> String.valueOf((char)i) ) .collect(Collectors.groupingBy(it -> counter.getAndIncrement() / 4 ,Collectors.joining())) .values(); 

Salida:

 [how , are , you?]