Manipulando String: Desafio

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.

Se eu entendi bem poderia fazer com vetor:

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

Esquece o que eu falei…agora que eu entendi!

Rsrsrs

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

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

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

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(",");
       }
    }

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