java - Why does String.split() return extra elements here? -


i trying split string using regexp returns element in array. please help. following program:

public class test {     public static void main(string[] arg){     string str1 = "{abc}{def}";     string delim = "[{}]+";      string[] tokens = str1.split(delim);      (int = 0; < tokens.length; i++) {         system.out.println("token value: "+ tokens[i]);         }             }     } 

output:

token value:  token value: abc token value: def 

why first token empty string? how can fixed?

the reason have empty initial element target string starts delimiter. splitting ",1,2" on , result in 3 entries, first being blank, same result. (you don't blank @ end because string#split explicitly removes them unless give negative second argument.)

if know string start delimiter , it's 1 character, remove it:

string[] tokens = str1.substring(1).split(delim); 

edit: or general case, see bohemian's answer removes first matching delim regardless of length.

otherwise, can loop:

import java.util.regex.*;  public class splittest {     public static void main(string[] arg){         string str1 = "{abc}{def}";          matcher m = pattern.compile("\\{([^}]+)\\}").matcher(str1);         while (m.find()) {             system.out.println("token value: " + m.group(1));         }     } } 

here's breakdown of pattern string:

  • the \\{ @ beginning matches literal {
  • the ( , corresponding ) later create capture group
  • within capture group, [^}]+ means "one or more of character isn't }
  • the trailing \\} match literal }

then loop through matches in string, getting value of capture group


Comments

Popular posts from this blog

c# - DetailsView in ASP.Net - How to add another column on the side/add a control in each row? -

javascript - firefox memory leak -

Trying to import CSV file to a SQL Server database using asp.net and c# - can't find what I'm missing -