dgelinas21
dgelinas21

Reputation: 641

Parse out specific characters from java string

I have been trying to drop specific values from a String holding JDBC query results and column metadata. The format of the output is:

[{I_Col1=someValue1, I_Col2=someVal2}, {I_Col3=someVal3}]

I am trying to get it into the following format:

I_Col1=someValue1, I_Col2=someVal2, I_Col3=someVal3

I have tried just dropping everything before the "=", but some of the "someVal" data has "=" in them. Is there any efficient way to solve this issue?

below is the code I used:

for(int i = 0; i < finalResult.size(); i+=modval) { 
  String resulttemp = finalResult.get(i).toString();
  String [] parts = resulttemp.split(",");

  //below is only for
  for(int z = 0; z < columnHeaders.size(); z++) {
    String replaced ="";
    replaced = parts[z].replace("*=", "");
    System.out.println("Replaced: " + replaced);
  }
}

Upvotes: 0

Views: 205

Answers (3)

GhostCat
GhostCat

Reputation: 140427

You don't need any splitting here!

You can use replaceAll() and the power of regular expressions to simply replace all occurrences of those unwanted characters, like in:

someString.replaceAll("[\\[\\]\\{\\}", "")

When you apply that to your strings, the resulting string should exactly look like required.

Upvotes: 1

fill͡pant͡
fill͡pant͡

Reputation: 1165

You could use a regular expression to replace the square and curly brackets like this [\[\]{}]

For example:

String s = "[{I_Col1=someValue1, I_Col2=someVal2}, {I_Col3=someVal3}]";
System.out.println(s.replaceAll("[\\[\\]{}]", ""));

That would produce the following output:

I_Col1=someValue1, I_Col2=someVal2, I_Col3=someVal3

which is what you expect in your post.

A better approach however might be to match instead of replace if you know the character set that will be in the position of 'someValue'. Then you can design a regex that will match this perticular string in such a way that no matter what seperates I_Col1=someValue1 from the rest of the String, you will be able to extract it :-)

EDIT: With regards to the matching approach, given that the value following I_Col1= consists of characters from a-z and _ (regardless of the case) you could use this pattern: (I_Col\d=\w+),?

For example:

String s = "[{I_Col1=someValue1, I_Col2=someVal2}, {I_Col3=someVal3}]";
    Matcher m = Pattern.compile("(I_Col\\d=\\w+),?").matcher(s);
    while (m.find())
        System.out.println(m.group(1));

This will produce:

I_Col1=someValue1
I_Col2=someVal2
I_Col3=someVal3

Upvotes: 1

pimmen
pimmen

Reputation: 402

You could do four calls to replaceAll on the string.

String query = "[{I_Col1=someValue1, I_Col2=someVal2}, {I_Col3=someVal3}]"
String queryWithoutBracesAndBrackets = query.replaceAll("\\{", "").replaceAll("\\]", "").replaceAll("\\]", "").replaceAll("\\[", "")

Or you could use a regexp if you want the code to be more understandable.

String query = "[{I_Col1=someValue1, I_Col2=someVal2}, {I_Col3=someVal3}]"
queryWithoutBracesAndBrackets = query.replaceAll("\\[|\\]|\\{|\\}", "")

Upvotes: 0

Related Questions