Печать инициалов пользовательского ввода любой длины вместе с полной фамилией в Java
Я новичок в Java, и я пытался решить проблему, которая, по моему мнению, может иметь более простой ответ, чем мой код. Проблема заключалась в том, чтобы напечатать инициалы пользовательского ввода любой длины вместе с полной фамилией. Но это имеет быть выполненным без каких-либо String.split() или массивов. Я пытался заставить пользователя вводить свое имя по одному слову за раз, но есть ли какой-нибудь возможный способ получить все имя сразу и сделать так, как требуется. Мой код выглядит следующим образом:
import java.io.*;
public class Initials {
public static void main(String[]args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter the number of words your name contains");
int n=Integer.parseInt(br.readLine());
String str="";
for(int x=1;x<=n-1;x++){
System.out.println("Enter your name's word number:"+" "+x);
String s=br.readLine();
String st=s.toUpperCase();
char ch=st.charAt(0);
str=str+ch+".";
}
System.out.println("Enter your surname");
String sur=br.readLine();
str=str+" "+sur.toUpperCase();
System.out.println(str);
}
}
3 ответа
Используйте регулярное выражение (а именно (?<=\w)\w+(?=\s)
):
String name = "John Paul Jones"; // read this from the user
System.out.println(name.replaceAll("(?<=\\w)\\w+(?=\\s)", "."));
JP Jones
нет split()
нет массивов:)
Небольшое объяснение: мы, по сути, хотим заменить все буквы каждого слова, за которыми следует символ пробела, кроме первой буквы, на .
персонаж. Чтобы соответствовать таким словам, мы используем (?<=\w)\w+(?=\s)
:
(?<=\w)
это позитивный взгляд сзади; он проверяет, что слово-символ существует в начале совпадения, но не включает его в само совпадение. У нас есть этот компонент, потому что мы не хотим сопоставлять первый символ каждого имени, а скорее все, кроме первого (за исключением фамилии, с которой мы вскоре разберемся).\w+
соответствует любой непрерывной строке символов слова; мы используем это, чтобы соответствовать остальной части имени.(?=\s)
позитивный взгляд; он проверяет, что за нашим совпадением следует пробельный символ, но не включает его в само совпадение. Мы включили этот компонент, потому что мы не хотим заменять что-либо в фамилии, за которой не должен следовать символ пробела и, следовательно, он не должен совпадать с регулярным выражением.
Другой способ обойти ---
import java.util.Scanner;
//a class that will print your output
class Initial {
public void Initials() {
Scanner sc = new Scanner(System.in);
System.out.print("Enter Full name:");
String name = sc.nextLine();
int l = name.length();
int pos = 0;
for (int i = l - 1; i >= 0; i--) {
char ch = name.charAt(i);
if (ch == ' ') {
pos = i; //getting the last space before Surname
break;
}
}
System.out.print("The initials are: ");
System.out.print(name.charAt(0) + ".");//prints first name initial
// with dot
for (int x = 1; x < pos; x++) //finds midname initial
{
char ch = name.charAt(x);
if (ch == ' ') {
System.out.print(name.charAt(x + 1) + ".");
}
}
for (int i = pos; i < l; i++) { //for printing Surname
System.out.print(name.charAt(i));
}
}
}
public class Str {
public static void main(String[] args) {
Initial i = new Initial();
i.Initials();
}
}
// Этот код будет работать для любого нет. слов в названии
class Surnam {
public static void main(String name) {
name = " " + name;
int l=name.length(), p=0, m=0, r=0;
char y;
String word=" ", words=" ";
for(int i = 0; i = 0; i--) {
y=name.charAt(i);
if(y==' ') {
r=name.lastIndexOf(y); //extracting the last space of the string
word=name.substring(i,l); //extracting the surname
words=name.replace(word," "); //removing the surname break;
}
}
for (int i = 0; i <= r - 1; i++) {
char x=words.charAt(i);
if (x == ' ') {
System.out.print(words.charAt(i + 1) + "."); //Printing all initials before the surname with a dot
}
}
for (int i = l - 1; i >= 0; i--) {
char x=name.charAt(i);
if(x==' ') {
m=i;
name=name.substring(m,l); //extracting the surname
name=name.trim(); //removing all the spaces before the surname
System.out.print(name);
break;
}
}
}
}