Cortar strings concatenadas

9 respostas
E

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.

9 Respostas

Rodrigo_Sasaki

use o substring().

E

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

Rodrigo_Sasaki

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("\\+");
E

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

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);
		
		
	}
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
Rodrigo_Sasaki

é 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.

Rodrigo_Sasaki

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

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("\\s\\+\\s");

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

			int tam = strings[i].length();
			String nome = strings[i];
			System.out.println("Nome normal: " + nome);
			nome = nome.substring(0, tam - 4);
			System.out.println("Nome cortado: " + 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.

Rodrigo_Sasaki

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("\\s\\+\\s");

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

			int tam = strings[i].length();
			String nome = strings[i];
			System.out.println("Nome normal: " + nome);
			nome = nome.substring(0, tam - 4);
			System.out.println("Nome cortado: " + 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.

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.

E

consegui resolver, obrigado a todos pela ajuda.

Criado 28 de maio de 2012
Ultima resposta 28 de mai. de 2012
Respostas 9
Participantes 3