Java: расщепление строк - PullRequest
       2

Java: расщепление строк

2 голосов
/ 18 ноября 2010

У меня есть следующая строка:

     Mr John Smith Dickson <john@yahoo.com>

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

1-я часть - мистер
2 часть - Джон Смит Диксон
3-я часть - john@yahoo.com

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

приведенное выше имя является просто примером, имя может быть другим, например. Джон, Джон Смит, Джон Смит Диксон

Ответы [ 7 ]

3 голосов
/ 18 ноября 2010

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

это работает

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

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

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

протестировано здесь

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

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

1 голос
/ 18 ноября 2010
String s = "Mr John Smith Dickson<john@yahoo.com>";
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);
}
1 голос
/ 18 ноября 2010
String mister = "Mr John Smith Dickson - john@yahoo.com";
String[] misters = mister.split(" ");

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

String first = misters[0];

Второй:

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

Третье:

String third = misters[5];
1 голос
/ 18 ноября 2010

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

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

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

0 голосов
/ 18 ноября 2010

Если у вас всегда есть сокращения, такие как Mr, Mrs, Dr, в начале строки вы можете использовать регулярное выражение:

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

Regex в действии.

0 голосов
/ 18 ноября 2010

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

Mr

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

Джон Смит Диксон

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

E-mail

".*<(.*)>"
0 голосов
/ 18 ноября 2010

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

String s = "Мистер Джон Смит Диксон"; String [] parts = s.split ("");

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

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

...