Como pegar valores entre carateres numa String?

Terei uma string separada por alguns caracteres.
Ex. 15]100,000[14$81307/1/1

Preciso separar em:
15
100,00
14
81307/1/1 (as barras são parte do que preciso)

O problema.
o que tiver antes do “]” pode variar entre 1 e 4 caracteres
o que tiver entre “]” e “[” pode ser algo como 5,125 (é um percentual)
o que tiver entre “[” e “$” 1 e 2 caracteres
depois do “$” pode ser até 15 caracteres, mas este valor posso pegar usando indexOf(’$’) + 1)

substring talves? como?

como poderia pegar para os demais valores?

Não sei se fui claro.

axo que com substring daria para fazer
mas a logica ai tb num sei
tem q se pensar um pouco dai
:stuck_out_tongue:

Olá!

O que tu precisas são Expressoes Regulares.
Não vou te ajudar a montá-la, mas deixo links para que tu possas estudar sobre o assunto.

http://java.sun.com/developer/technicalArticles/releases/1.4regex/
http://java.sun.com/docs/books/tutorial/essential/regex/

Att,

humm, ja é um começo, vou dar uma olhada nos links.

vlw

Assim, não querendo disfocar a sua duvida ou a resposta dos amigos, ou mesmo gerar algum flamewar. Mas seria mais para te dar uma opção.

Não sei se é o caso, e se não for me perdoe.
Vi essa sua String e imaginei que é um caso que os programadores ?C? aqui da empresa fazem, gerar uma string por separadores para trafegar na rede. (Ou nas mensagens dos objetos no seu caso).

Resumindo: Porque você não usa objeto? Assim não tem que ficar dando substring e reduz a quantidade de erros que pode dar por strings invalidas.

public class MeuObjeto {
    
    //Não sei os nomes de seus atributos
    private int num1;
    private float num2;
    private int num3;
    private Date data1;

    //Quem gerar o objeto tem todos os dados
    public MeuObjeto(int _num1, float _num2, int _num3, Date _data1){
        num1 = _num1;
        num2 = _num2;
        num3 = _num3;
        data1 = _data1;
    }
    
    //Daqui para baixo é de quem recebeu o objeto e ai é só dar os gets
    public int getNum1() {
        return num1;
    }

    public float getNum2() {
        return num2;
    }

    public int getNum3() {
        return num3;
    }

    public Date getData1() {
        return data1;
    }
    
    
}

Não sei se fui claro, mas se lhe interessar avise.

Abraços
Ricoldi

Acho que da pra ajudar…

public static void main(String[] args) {
		String [] patterns = {"\d{1,4}]" ,"].*\[" ,"\[[0-9]{1,2}", "\$.{1,15}"};
		for(int i =0; i < patterns.length; i++){
			Pattern pattern = Pattern.compile(patterns[i]);
			Matcher matcher = pattern.matcher("15]100,000[14$81307/1/1");
			while (matcher.find()) {
				System.out.println("Resultado: " +matcher.group());
			}
		}
}

Testa ai :smiley:

[quote=Arisson Leal]Acho que da pra ajudar…

public static void main(String[] args) {
		String [] patterns = {"\d{1,4}]" ,"].*\[" ,"\[[0-9]{1,2}", "\$.{1,15}"};
		for(int i =0; i < patterns.length; i++){
			Pattern pattern = Pattern.compile(patterns[i]);
			Matcher matcher = pattern.matcher("15]100,000[14$81307/1/1");
			while (matcher.find()) {
				System.out.println("Resultado: " +matcher.group());
			}
		}
}

Testa ai :smiley:
[/quote]

fechou era isso mesmo, resolve o problema.
mas de qq forma vou estudar mais sobre o assunto.

vlw a todos.

Olha eu de novo.

mais uma duvida sobre o assunto.

Não consegui resolver o seguinte:

Pegar somente o estiver entre $ e a / (primeira barra)
Ex. de $85943/1/1 para 85943

vlw

Consegui resolver, segue o codigo para ajudar quem precise.

vlw

String patterns = {"\$(\d){1,9}"};
Pattern pattern = Pattern.compile(patterns);
Matcher matcher = pattern.matcher("6$85943/1/1");
while (matcher.find()) {
	System.out.println("Resultado: " + matcher.group().substring(1));
}

String t = "15]100,000[14$81307/1/1"; String[] ts = t.split("]|\[|\$"); Para o segundo problema você pode usar o substring(int, int). Os índices você pode pegar com o indexOf().