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.
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<String> lista_str = new ArrayList<String>();
String[] strings = teste.split("\\s\\+\\s");
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 - 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.
[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<String> lista_str = new ArrayList<String>();
String[] strings = teste.split("\\s\\+\\s");
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 - 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.[/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.