2010-11-18 5 views
2

Ich habe die folgende Zeichenfolge:Java: String Spaltung

 Mr John Smith Dickson <[email protected]> 

ich es in drei Teile geteilt werden soll:

1. Teil - Herr
2. Teil - John Smith Dickson
3. Teil - [email protected]

Ich bin verwirrt, wie ich über das erreichen könnte, kann jemand helfen?

Der obige Name ist nur Beispiel, der Name könnte variieren, z. John, John Smith, John Smith Dickson

+0

gibt es keine E-Mail in der ersten Zeichenfolge – Emil

+0

do u wollen einfach nur für diesen Namen oder in einem allgemeinen beliebigen Namen in einem solchen Format aufgeteilt. – Emil

Antwort

3

Sie sollten eine Regex verwenden. Sie können das erste Wort bis zum Leerzeichen aufnehmen, dann die nächsten drei Wörter, getrennt durch Leerzeichen, und dann das Ding in den spitzen Klammern.

dies funktioniert

(\w+)\s+(\w+\s+\w+\s+\w+)\s*<(.*)> 

\ w: jede Wortzeichen. Das + bedeutet 1 oder mehr. \ s bedeutet ein beliebiges Leerzeichen. Dinge in() werden erfasst. Die Regex Sie in Java-Code verwenden würde, ist

(\\w+)\\s+(\\w+\\s+\\w+\\s+\\w+)\\s*<(.*)> 

hier getestet

http://www.regexplanet.com/simple/index.html 

beachten Sie, dass Sie dies mit Spagat machen könnte, aber wann immer Sie Splitting werden, dann die Token bekommen, dann Splitting-Token, dann Wenn du mehr Token bekommst und dich dann wieder aufteilst, machst du etwas zu kompliziert. Regex vereinfacht die Dinge erheblich.

+0

Ich bin nicht gut Vers in Regex, wenn Sie nicht meins können Sie Probe Regex dafür geben, danke – Apache

+0

@apache Ich habe die Regext hinzugefügt – hvgotcodes

1

Sie möchten IhrString verwenden .split (""); Dies teilt die Zeichenfolge in jedes Wort auf (basierend auf den Leerzeichen). Wenn Sie jede Person wissen, drei Namen hat, könnte man dann folgendes sagen:

String myString = "Mr John Smith Dickson [email protected]";  
String[] splitResult = myString.split(" "); 
String title = splitResult[0]; \\ Mr 
String name = splitResult[1]+" "+splitResult[2]+" "+splitResult[3]; \\ John Smith Dickson 
String email = splitResult[4]; 

Wenn Sie nicht wissen, wie viele Namen eine Person hat, ist es ein wenig komplizierter wird.

1
String mister = "Mr John Smith Dickson - [email protected]"; 
String[] misters = mister.split(" "); 

Erster Teil:

String first = misters[0]; 

Zweitens:

String second = misters[1] + " " + misters[2] + " " + misters[3]; 

Drittens:

String third = misters[5]; 
0

Java hat eine String.split (String regex) Methode, die Sie verwenden können so:

Zeichenfolge s = "Mr. John Smith Dickson"; String [] Teile = s.split ("");

Das wird Ihnen eine Zeichenfolge Array der durch die Leerzeichen getrennten Teile geben.dann könntest du etwas machen wie

Sting title = part [0]; String-Name = Teil [1] + "" + Teil [2] + "" + Teil [3];

0

Verwenden Sie einige Regex.

Herr:

"([A-Za-z]{2,3}) " 

John Smith Dickson

"[A-zA-z] (.*)<" 

Email

".*<(.*)>" 
0

Wenn Sie immer Abkürzungen wie Herr, Frau, Dr. zu Beginn der Zeichenfolge können Sie Verwende den Regex:

^([A-Z][a-z]{1,2})\s+([^<]*)<(.*?)>$ 

Regex in action.

1
String s = "Mr John Smith Dickson<[email protected]>"; 
Pattern pattern = Pattern.compile("(\\w+)\\b(.+)<(.+)>"); 
Matcher matcher = pattern.matcher(s); 

if (matcher.matches()) { 
String title = matcher.group(1); 
String name = matcher.group(2); 
String email = matcher.group(3); 
}