Manipulando String: Desafio

6 respostas
Algebra

String original = [(?B=“valor1”),(?B=“valor2”),(?B=“valor3”)]

saída desejada = valor1, valor2, valor3

Qual a forma mais eficiente de fazer isso:

tá lançado o desafio.

6 Respostas

pvrsouza

Se eu entendi bem poderia fazer com vetor:

String[] original = {"valor1", "valor2", "valor3"}; for(int x=0;x<3;x++){ System.out.print(original+",") }

pvrsouza

Esquece o que eu falei…agora que eu entendi!

Rsrsrs

maior_abandonado

da um split na sua string separando por virgula, ai você vai ter cada campo da sua string pelo que eu intendi.

depois itera os campos pegando o substring entre o indexOf de " + 1, e o lastIndexOf de ".

eu testei aqui exibindo as strings no loop e funcionou, mas você mesmo pode fazer, do jeito que falei são 3 linhas mais a criação da string original

badjceo
public static void main(String[] args) 
	{
		String original = "[(?B=\"valor1\"),(?B=\"valor2\"),(?B=\"valor3\")]";

		System.out.println(original.replaceAll("(\\[?\\(\\?B=\"|\"\\)\\]?)", ""));
		
	}
ArchV

Bem pensado o esquema do replaceAll por string vazia.

Trabalhando com substring ficou desta forma:

public static String criarSubString(String entrada)
    {
       int begin = 0;
       int end = 0;
       begin = entrada.indexOf("v");
       end = entrada.lastIndexOf("r");
       entrada = entrada.substring(begin, end+2);
       return entrada;
    }
    public static void main(String[] args) 
    {
       
       String manipular = "[(?B="+"valor1"+"),(?B="+"valor2"+"),(?B="+"valor3"+")]";
       String array[];
       array = manipular.split(",");
       for(int i=0;i<array.length;i++)
       {
          array[i] = criarSubString(array[i]);
       }
         for(int i=0;i<array.length;i++)
       {
           System.out.print(array[i]);
           if(i == array.length-1)
           {
               continue; // despreza o resto do for.
           }
           System.out.print(",");
       }
    }
ctdaa

Expressões regulares… sempre tem um jeito de fazer… é só descobrir como.
Tente rodar o teste abaixo. Veja que o valor esperado vai aparecer no grupo indexado de 3, quando este não for null:

//
   // exemplo de parser com regex recuperando grupos
   //
       String line="[(?B=\"valor1\"),(?B=\"valor2\"),(?B=\"valor3\")]"; 
       String regex="(\\(\\?B(=(([^\\)])*)\\)))*";
       Pattern pat = Pattern.compile(regex);
       Matcher mat = pat.matcher(line);
       while (mat.find()) {
          for (int i =1; i <= mat.groupCount() ; i++ ) {
            System.out.println("Grupo indexed: " + i + " - " + mat.group(i));
          }
          System.out.println("Grupo value: " + mat.group(3));
          System.out.println("Result index: " + mat.start() + " - "+  mat.end() );
          System.out.println("Result value: " + line.substring(mat.start(), mat.end()));
       }
Criado 29 de janeiro de 2010
Ultima resposta 29 de jan. de 2010
Respostas 6
Participantes 6