2015-10-09 7 views
0

Я борюсь с этим кодом. Возвращение этого, например, «JS John Smith», но когда я пытаюсь поставить два имени плюс фамилию, все, что я получаю, это беспорядок. Я хочу получить, когда набираю, например: «Джон Уильям Смит», что-то вроде этого: «JW Smith», кто-нибудь знает, как это сделать?Инициалы от двух имен плюс полная фамилия

import java.io.*; 
import java.io.BufferedReader; 

public class ex54 { 

    public static void main(String[] args) { 
     System.out.print("Enter your name: "); 
     BufferedReader br = new BufferedReader(new InputStreamReader (System.in)); 
     String fullName = null; 
     try{ 
      fullName = br.readLine(); 
     } catch (IOException ioe) { 
      System.out.println("Error"); 
      System.exit(1); 
     } 
     int spacePos = fullName.indexOf(" "); 
     // String firstName = fullName.substring(0, spacePos); 
     // String secondName = fullName.substring(1, spacePos); 
     String firstInitial = fullName.substring(0, 1); 
     String secondInitial = fullName.substring(spacePos+1, spacePos+2); 
     String userName = (firstInitial + secondInitial + " ").concat(fullName); 

     System.out.println("Hello, your user name is: " + userName); 
     } 
    } 
} 
+5

Хороший кандидат на 'split' –

ответ

1

Вы можете разделить имя, предполагая, что вы получаете три-имя строку:

String[] names = fullname.split(" "); 
System.out.println("" + names[0].charAt(0) + names[1].charAt(0) + " " + names[2]); 
+0

работает как шарм, спасибо человеку! – imperato

+1

Не общего назначения. Не получается, если не указано ни одно среднее имя, и выдается неверный результат, если указаны несколько средних имен. – Andreas

0
int spacePos = -1; 

    System.out.print("Hello, your user name is:"); 
    do { 
     System.out.print(" "+fullName.substring(spacePos+1, spacePos+2)); 
     fullName = fullName.substring(spacePos+1); 
     spacePos = fullName.indexOf(" "); 
    }while(spacePos != -1); 
    System.out.println("\b"+fullName); 
0

Только для пинков, здесь является реализация с использованием регулярных выражений:

private static String firstNamesToInitials(String name) { 
    StringBuilder buf = new StringBuilder(); 
    Matcher m = Pattern.compile("\\b([A-Z])[A-Za-z]*\\b").matcher(name); 
    String lastName = null; 
    while (m.find()) { 
     buf.append(m.group(1)); 
     lastName = m.group(); 
    } 
    if (buf.length() <= 1) 
     return lastName; 
    buf.setCharAt(buf.length() - 1, ' '); 
    return buf.append(lastName).toString(); 
} 

Тест

System.out.println(firstNamesToInitials("Cher")); 
System.out.println(firstNamesToInitials("John Smith")); 
System.out.println(firstNamesToInitials("John William Smith")); 
System.out.println(firstNamesToInitials("Charles Philip Arthur George")); 
System.out.println(firstNamesToInitials("Pablo Diego José Francisco de Paula Juan Nepomuceno María de los Remedios Cipriano de la Santísima Trinidad Ruiz y Picasso")); 

Выход

Cher 
J Smith 
JW Smith 
CPA George 
PDFPJNRCTR Picasso