В Java все находится в форме класса.
Если вы хотите использовать любой объект, тогда у вас есть две фазы:
Пример:
Object a;
a=new Object();
То же самое для концепции массива
Item i[]=new Item[5];
i[0]=new Item();
Если вы не дают секцию инициализации, тогда возникает NullpointerException
.
Нет никакого простого решения для этого. Конструкция имени варьируется от культуры до культуры, и даже в англоязычном мире существуют префиксы и суффиксы, которые являются не обязательно частью имени.
основной подход А должен искать honorifics в начале строки (например, "Hon. John Doe") и числа или некоторые другие строки в конце (например, "IV John Doe", "John Doe Jr."), но действительно все, что можно сделать, применяют ряд эвристики и надежды на лучшее.
могло бы быть полезно найти список необработанных имен и протестировать Ваш алгоритм против него. Я не знаю, что существует что-либо предварительно упакованное там, все же.
Существует номер 100% способ сделать это.
можно разделить на пробелах и попытаться понять имя все, что Вы хотите, но когда оно сведется к нему, Вы будете иногда понимать его превратно. Если это достаточно хорошо, пойдите для любого из ответов сюда, которые дают Вам способы разделить.
, Но некоторые люди будет иметь имя как "John Wayne Olson", где "John Wayne" является именем, и у кого-то еще будет имя как "John Wayne Olson", где "Wayne" является их вторым именем. Нет ничего существующего на то имя, которое скажет Вам который способ интерпретировать его.
Это - просто способ, которым это. Это - аналоговый мир.
Мои правила довольно просты.
Принимают последнее участие-> Фамилия
, Если существует несколько оставленных частей, принимают последнее участие-> Второе имя
, Что оставляют-> Имя
, Но не предполагайте, что это будет на 100% точно, ни будет любое другое hardcoded решение. У Вас должна будет быть способность позволить пользователю отредактировать этот him/her-self.
Я соглашаюсь с не сделать это . DenBoer Rick Van имени закончил бы со вторым именем Van, но это - часть фамилии.
Я соглашаюсь, нет никакого простого решения для этого. Но я нашел ужасный подход в статье Microsoft KB для VB 5.0, который является фактической реализацией к большой части обсуждения, говорил о здесь: http://support.microsoft.com/kb/168799
Что-то вроде этого могло использоваться в повышении.
Это - глупое поручение. Слишком много исключений, чтобы быть в состоянии сделать это детерминировано. Если бы Вы делали это, чтобы предварительно обработать список для дальнейшего рассмотрения, то я утвердил бы, что меньше, конечно, было бы больше.
Дальнейшая обработка, как почти гарантируют, создаст больше работы, поскольку необходимо пройти переобъединение что раскол обработки.
Вы не хотите делать это, если Вы только не собираетесь быть контактом с людьми от одной культуры.
, Например:
фамилией Guido van Rossum является van Rossum.
именем Hayao МИЯДЗАКИ является Hayao.
наибольший успех, который Вы могли сделать, должен снять изоляцию с общих заголовков и приветов, и попробовать некоторую эвристику.
, Несмотря на это, самое легкое решение состоит в том, чтобы просто сохранить полное имя или попросить данный и фамилию отдельно.
Несомненно, существует простое решение - разделяет строку пробелами, считают количество маркеров, если существует 2, интерпретируйте их, чтобы быть Именем и фамилией, если существует 3, интерпретируйте его, чтобы быть ПЕРВЫМИ, СРЕДНИМИ, и В ПОСЛЕДНИЙ РАЗ.
проблемой, которая является простым решением, не будет 100%-е правильное решение - кто-то мог всегда вводить имя со значительно большим количеством маркеров или мог включать заголовки, фамилии с пространством в нем (действительно ли это возможно?), и т.д. Можно предложить решение, которое работает на большинство имен большую часть времени, но не абсолютное решение.
я следовал бы рекомендации Алозы разделить поля ввода.
Я сказал бы Полосу приветы из списка тогда разделенный пространством, поместив list.first () как имя, list.last (), поскольку фамилия тогда присоединяется к остатку пространством и имеет это как второе имя. И, ПРЕЖДЕ ВСЕГО, отобразите свои результаты и позвольте пользователю изменить их!
Если просто необходимо сделать это, добавьте предположения к UI как дополнительный выбор. Таким образом, Вы могли сказать пользователю, как Вы проанализировали имя, и позвольте им выбрать различный парсинг из списка, который Вы предоставляете.
Понимание этого является плохой идеей, я записал, что этот regex в жемчуге - вот что работавший лучшее для меня. Я уже отфильтровал названия компаний.
Вывод в формате vcard: (hon_prefix, given_name, additional_name, family_name, почтенный суффикс)
/^ \s*
(?:((?:Dr.)|(?:Mr.)|(?:Mr?s.)|(?:Miss)|(?:2nd\sLt.)|(?:Sen\.?))\s+)? # prefix
((?:\w+)|(?:\w\.)) # first name
(?: \s+ ((?:\w\.?)|(?:\w\w+)) )? # middle initial
(?: \s+ ((?:[OD]['’]\s?)?[-\w]+)) # last name
(?: ,? \s+ ( (?:[JS]r\.?) | (?:Esq\.?) | (?: (?:M)|(?:Ph)|(?:Ed) \.?\s*D\.?) |
(?: R\.?N\.?) | (?: I+) ) )? # suffix
\s* $/x
примечания:
Я ценю, что это трудно сделать право - но если Вы обеспечиваете, пользователь способ отредактировать результаты (скажите, всплывающее окно для редактирования имени, если это не угадало), и все еще угадайте "прямо" для большинства случаев..., конечно, это - предположение, что это жестко.
легко сказать, "не делают этого" при рассмотрении проблемы теоретически, но иногда обстоятельства диктуют иначе. Имение полей для всех частей имени (заголовок, во-первых, середина, в последний раз, суффикс, только для именования некоторых) может поднять много экранной недвижимости - и объединенный с проблемой адреса (тема в течение другого дня) может действительно загромоздить то, что должен быть чистым, простым UI.
я предполагаю, что ответ должен быть, "не делают этого, если Вы абсолютно не имеете к, и если Вы делаете, сохраните его простым (некоторые методы для этого были отправлены здесь), и предоставьте пользователю средства отредактировать результаты в случае необходимости".
Я должен был сделать это. На самом деле, что-то намного тяжелее, чем это, потому что иногда "именем" был бы "Smith, John" или "Smith John" вместо "John Smith", или не именем человека вообще, но вместо этого названием компании. И это должно было сделать это автоматически без возможности для пользователя исправить его.
то, Что я закончил тем, что делал, придумывало конечный список шаблонов, как которые имя могло быть в:
Наконец, Первая Средняя Начальная буква
Первый Последний
Первая Средняя Начальная буква В последний раз
Наконец, Первая середина
Первая середина В последний раз
Первый Последний
Добавляют Вашего г-на, Jr, там также. Скажем, Вы заканчиваете приблизительно с дюжиной шаблонов.
Мое приложение имело словарь общего имени, общие фамилии (можно найти их в сети), общие заголовки, общие суффиксы (младший, сэр, md) и использование, которое было бы в состоянии высказать очень хорошие предположения о шаблонах. Я не настолько умен, моя логика не была то, что воображение, и все же тем не менее, не случалось так, что трудно для создания некоторой логики, которая угадала больше чем 99% времени.
Вы, вероятно, ничего не должны делать воображение действительно. Что-то вроде этого должно работать.
Name = Name.Trim();
arrNames = Name.Split(' ');
if (arrNames.Length > 0) {
GivenName = arrNames[0];
}
if (arrNames.Length > 1) {
FamilyName = arrNames[arrNames.Length - 1];
}
if (arrNames.Length > 2) {
MiddleName = string.Join(" ", arrNames, 1, arrNames.Length - 2);
}
можно также хотеть проверить на заголовки сначала.
Если Вы должны делать этот парсинг, я уверен, что Вы получите много хороших предложений здесь.
Мое предложение - , не делают этого парсинга .
Вместо этого создайте свои поля ввода так, чтобы информация была уже выделена. Имейте отдельные поля для заголовка, имени, средней начальной буквы, фамилии, суффикса, и т.д.
Можно сделать очевидные вещи: ищите младший, II, III, и т.д. как суффиксы, и г-н, г-жа, Доктор, и т.д. как префиксы и удалите их, тогда первое слово является именем, последнее слово является фамилией, все промежуточное вторые имена. Кроме этого, нет никакого надежного решения для этого.
А идеальным примером является David Lee Roth (фамилия: Roth) и Eddie Van Halen (фамилия: Van Halen). Если именем Ann Marie Smith является "Ann Marie", нет никакого способа отличить это от Ann, имеющей второе имя Marie.
Существует несколько дополнений, которые мы использовали в нашей компании для этого. Я закончил создать способ на самом деле указать форматы для имени на нашем различных импортах для разных клиентов. Есть компания, у которой есть инструмент, который в моем опыте стоит всего цена и действительно невероятно при решении этой темы. Это на: http://www.softwarecompany.com/ и отлично работает. Наиболее эффективным способом выполнения этого с использованием любого статистического подхода - это разделить строку запятыми или пробелами, то: 1. Разделите заголовки и префиксы 2. Потрите суффиксы из 3, имя анализа в порядке (2 имена = F & L, 3 имена = fml или lmf) в зависимости от порядка строки ().