Cortar strings concatenadas

tenho uma string que pode conter o seguinte:
nome1 + nome2 + nome3 + nome4
porem caso esta string exceda um tamanho maximo
tenho que cortar as ultimas 4 letras de cada palavra
alguem sabe como posso fazer isso.

use o substring().

minha duvida e como pegar cada palavra, separado pelo “+”

ah, sim… para isso use o split(), ele vai separar as strings por um caracter que você especificar, no caso o +, e jogará as Strings “quebradas” em um array de Strings

vale comentar que o método split() recebe uma expressão regular, e não uma String literal, portanto você vai precisa escapar o seu +, assim:

String[] strings = myString.split("\\+");

funcionou porem está cortando um caractere a mais da ultima posição, não sei porque.

[code]
public static void main(String[] args) {

String teste = "abcdef + abcdef + abcdef + abcdef";

ArrayList<String> lista_str = new ArrayList<String>();

String[] strings = teste.split("\\+");

for (int i = 0; i < strings.length; i++) {
	
	int tam = strings[i].length();
	String nome =  strings[i];
	System.out.println("Nome normal: " +nome);
	nome = nome.substring( 0, tam-5);
	System.out.println("Nome cortado: " +nome);
	
	
}[/code]

esta retornando:

Nome normal: abcdef 
Nome cortado: ab
Nome normal:  abcdef 
Nome cortado:  ab
Nome normal:  abcdef 
Nome cortado:  ab
Nome normal:  abcdef
Nome cortado:  a

é que você não está removendo os espaços, e o último nome não possui um espaço na frente dele, altera a linhaint tam = strings[i].length(); para int tam = strings[i].trim().length(); e veja o que acontece, daí pra frente você vai saber como ajustar.

ah, não esqueça de adicionar o trim() na linha em que você pega o nome também:String nome = strings[i].trim();

Já que o padrão do split é " + ", podreria então usar uma expressão regular com o padrão “espaço seguido de “+” seguido de espaço”

ou seja

String[] strings = teste.split("\\s\\+\\s");

Desta forma não precisaria dar split em seu código. Lembrando também que desta forma você deve se atentar que seu índice começa no 0 e o tamanho total da String teria que ser retirado somente a quantidade de posições que você quer retirar, segue abaixo o código.


import java.util.ArrayList;

public class ExemploSprit {
	public static void main(String[] args) {

		String teste = "12345678 + 123456 + 123456789 + 1234567";

		ArrayList&lt;String&gt; lista_str = new ArrayList&lt;String&gt;();

		String[] strings = teste.split(&quot;\\s\\+\\s&quot;);

		for (int i = 0; i &lt; strings.length; i++) {

			int tam = strings[i].length();
			String nome = strings[i];
			System.out.println(&quot;Nome normal: &quot; + nome);
			nome = nome.substring(0, tam - 4);
			System.out.println(&quot;Nome cortado: &quot; + nome);

		}
	}

}

Lógico que com o split vai funcionar, mas se você sabe que seu padrão é " + ", poderia passar isso para a expressão regular.

[quote=ribclauport]Já que o padrão do split é " + ", podreria então usar uma expressão regular com o padrão “espaço seguido de “+” seguido de espaço”

ou seja

String[] strings = teste.split("\\s\\+\\s");

Desta forma não precisaria dar split em seu código. Lembrando também que desta forma você deve se atentar que seu índice começa no 0 e o tamanho total da String teria que ser retirado somente a quantidade de posições que você quer retirar, segue abaixo o código.


import java.util.ArrayList;

public class ExemploSprit {
	public static void main(String[] args) {

		String teste = "12345678 + 123456 + 123456789 + 1234567";

		ArrayList&lt;String&gt; lista_str = new ArrayList&lt;String&gt;();

		String[] strings = teste.split(&quot;\\s\\+\\s&quot;);

		for (int i = 0; i &lt; strings.length; i++) {

			int tam = strings[i].length();
			String nome = strings[i];
			System.out.println(&quot;Nome normal: &quot; + nome);
			nome = nome.substring(0, tam - 4);
			System.out.println(&quot;Nome cortado: &quot; + nome);

		}
	}

}

Lógico que com o split vai funcionar, mas se você sabe que seu padrão é " + ", poderia passar isso para a expressão regular.[/quote]

Sugestão interessante. Eu particularmente não faria assim, por gostar de ser seguro.

Um caso por exemplo em que existe um espaço após o último nome, a regex não satisfaria, mas realmente se o padrão é como ele exemplificou, a expressão regular diminuiria o código.

consegui resolver, obrigado a todos pela ajuda.