Dividir uma String a cada 20 caracteres

Aí galera, preciso fazer um método que dado uma string de entrada, ela tem q ser dividida a cada 20 caracteres
ai eu tava pensando em algo do tipo…

[code]public void escrever(String linha) {
String linha1 = linha;
String novalinha="";
ArrayList linhas = new ArrayList();
if(linha1.length() <=20) {
System.out.println(linha1);
}else {
while(linha1.length() >20) {

		linhas.add(linha.substring(21));
		novalinha =linha1.substring(21);[/code]

soh q eu tava lendo algo sobre o método splits, que tem q criar expressoes regular, q eu nao conheco, alguem pode da uma dica?

Olá, acho que para o que você precisa apenas o substring já resolve o problema. Mas em todo caso dê uma olhada na biblioteca da Apache - The Lang component: http://commons.apache.org/lang/
Dê uma estudada nos métodos estáticos da classe StringUtils.

Tem uma classe interessante chamada StringW da biblioteca Taglibs da Apache também.
Há um método estático dessa classe StringW chamado wordWrap. Veja mais ou menos um código:

import org.apache.taglibs.string.util.StringW;
public class Teste {
	public static void main(String[] args) {
		String str= "1a1 b 1c1d1e1f1g1h1i1j1k1l1m1n1o";
		String listaStr = StringW.wordWrap(str, 20);
		System.out.println(listaStr);
	}
}

o que vc tem que fazer no while:

while (linha1.length > 20) {
    linhas.add(linha1.substring(0, 20));
    linha1 = linha1.substring(20);
}
linhas.add(linha1);

talvez tenha que colocar 21 em algum desses caras, mas eh isso

eh soh q tiver mais de uma pra dividi saca… ai nao vai da…

[quote=mfjeng]Olá, acho que para o que você precisa apenas o substring já resolve o problema. Mas em todo caso dê uma olhada na biblioteca da Apache - The Lang component: http://commons.apache.org/lang/
Dê uma estudada nos métodos estáticos da classe StringUtils.

Tem uma classe interessante chamada StringW da biblioteca Taglibs da Apache também.
Há um método estático dessa classe StringW chamado wordWrap. Veja mais ou menos um código:

import org.apache.taglibs.string.util.StringW; public class Teste { public static void main(String[] args) { String str= "1a1 b 1c1d1e1f1g1h1i1j1k1l1m1n1o"; String listaStr = StringW.wordWrap(str, 20); System.out.println(listaStr); } } [/quote]

mais esse método vai dividir a cada 20 linhas, ou soh naso primeiras 20?

Olá a todos,

Caso alguém ainda precise deste exemplo, vou deixando minha contribuição.

public class Main {

	public static void main(String[] args) {

		String stringASerDividida = "12345678901234567890123";
		int dividirACada = 10;
		String stringFinal = "";

		if (stringASerDividida.length() <= dividirACada) {
			stringFinal = stringASerDividida;
		} else {
			for (int i = 0; i < stringASerDividida.length(); i += dividirACada) {
				String subString = "";
				if (stringASerDividida.substring(i).length() < dividirACada) {
					subString = stringASerDividida.substring(i,
							stringASerDividida.substring(i).length() + i);
				} else {
					subString = stringASerDividida.substring(i, i
							+ dividirACada);
				}
				stringFinal += subString + " ";
			}
		}
		System.out.println(stringFinal);
	}
}

[code]ArrayList result = new ArrayList();

    String value = "abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz";

    if(value.length() < 20) {
        result.add(value);
    }
    else {
        String regex = ".{20}";
        Pattern replace = Pattern.compile(regex);
        Matcher matcher = replace.matcher(value);

        while(matcher.find()) {
            result.add(matcher.group());
        }

        result.add(value.substring((value.length()/20 * 20), value.length()));
    }

    System.out.println(result);[/code]

O único problema com esse regex é que ele não retorna se a string não tiver menos que 20 caracteres e não retorna se o
último grupo de caracteres forem menor do que 20. Por essa razão eu coloquei

[quote] if(value.length() < 20) {
result.add(value);
}[/quote]

e para retornar o último grupo

Eu não sou mestre em regex, se alguém conhecer uma solução mais elegante, por favor nos mostre.

[quote=Sandro Queiroz]Olá a todos,
Caso alguém ainda precise deste exemplo, vou deixando minha contribuição.
[/quote]

Por favor, Sandro, evite ressuscitar tópicos muito antigos.