2010-04-17 9 views
1

Si j'ai une chaîne, par ex.Expression régulière scindée Java

setting=value 

Comment puis-je supprimer le « = » et transformer en deux chaînes distinctes contenant « réglage » et « valeur », respectivement?

Merci beaucoup!

Répondre

10

Deux options viennent à l'esprit.

La première split() est le String sur =:

String[] pieces = s.split("=", 2); 
String name = pieces[0]; 
String value = pieces.length > 1 ? pieces[1] : null; 

La seconde utilise directement regexes pour analyser le String:

Pattern p = Pattern.compile("(.*?)=(.*)"); 
Matcher m = p.matcher(s); 
if (m.matches()) { 
    String name = m.group(1); 
    String value = m.group(2);  
} 

Le second vous donne plus de puissance. Par exemple vous pouvez perdre automatiquement l'espace blanc si vous changez le modèle pour:

Pattern p = Pattern.compile("\\s*(.*?)\\s*=\\s*(.*)\\s*"); 
1

Vous n'avez pas besoin d'une expression régulière pour cela, il suffit faire:

String str = "setting=value"; 
String[] split = str.split("="); 
// str[0] == "setting", str[1] == "value" 

Vous pouvez définir un limit si value peut avoir un = en trop; voir le javadoc

+1

Cela _si en utilisant l'expression régulière, cependant. Par exemple, si vous voulez diviser sur?? ', Vous ne pouvez pas simplement' str.split ("?") '. Vous devriez l'échapper à 'str.split (" \\? ")'. – polygenelubricants

+0

Ah oui, j'ai oublié String.split de Java prend une expression régulière; la plupart des langues se divisent sur une chaîne –