2010-11-18 2 views
2

У меня есть следующая строка:Java: String Расщепление

 Mr John Smith Dickson <[email protected]> 

Я хочу, чтобы разделить его на три части:

первая часть - г-н
второй части - Джон Смит Dickson
третья часть - [email protected]

Я смущен тем, как я могу это сделать, может ли кто-нибудь помочь?

приведенное выше имя является просто образцом, имя может отличаться, например. John, John Smith, John Smith Dickson

+0

нет электронной почты в первой строке – Emil

+0

делать у просто хотите разделить только для этого имени или в общем любое имя в таком формате. – Emil

ответ

3

Вы должны использовать регулярное выражение. Вы можете записать первое слово до пробела, затем следующие три слова, разделенные пробелами, а затем в угловых скобках.

это работает

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

\ ш означает любое слово символ. Значение + означает 1 или более. \ s означает любой символ пробела. Вещи в() захватываются. Регулярное выражение вы бы использовать в Java коде

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

здесь испытывались

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

обратите внимание, что вы могли бы сделать это с расколов, но в любое время вы расщепление, а затем получить маркеры, затем расщепление маркеры, затем получая больше токенов, а затем снова раскалываясь, вы делаете что-то слишком сложное. Regex значительно упрощает работу.

+0

Я не хорошо стихотворяю в регулярном выражении, если и не могу, я могу дать примерное регулярное выражение для этого, спасибо – Apache

+0

@apache Я добавил regext – hvgotcodes

1

Вы должны использовать yourstring .split (""); Это разделит строку на каждое слово (на основе пробелов). Если вы знаете, каждый человек имеет три названия, вы могли бы сказать следующее:

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]; 

Если вы не знаете, сколько имен у человека, он становится немного сложнее.

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

Первая часть:

String first = misters[0]; 

Второе:

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

Третье:

String third = misters[5]; 
0

Java имеет (регулярное выражение типа String) String.split метод, который вы могли бы использовать например:

Строка s = "Mr John Smith Dickson"; Строка [] parts = s.split ("");

Это даст вам массив Array частей, разделенных пробелами.то вы можете сделать что-то подобное

Sting title = часть [0]; Строковое имя = часть [1] + "" + часть [2] + "" + часть [3];

0

Использование некоторых регулярных выражений.

Mr:

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

John Smith Dickson

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

Email

".*<(.*)>" 
0

Если у вас всегда есть аббревиатуры, как Mr, Mrs, Dr в начале строки вы можете используйте 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); 
} 
Смежные вопросы