我想知道如何忽略Java中的空格。此程序允许您输入您的第一个,中间和姓氏,然后输出您的姓名首字母。我现在试图让它忽略任何空格。提前谢谢!
String fullName;
char firstName;
char secondName;
char surname;
int space1;
int space2;
System.out.println("Please enter your first name, your second name and your surname: ");
fullName = kybd.nextLine();
firstName = fullName.charAt(0);
space1 = fullName.indexOf(" ");
secondName = fullName.charAt(space1 + 1);
space2 = fullName.lastIndexOf(" ");
surname = fullName.charAt(space2 + 1);
System.out.println("Initials: " + firstName + secondName + surname);
}
}
答案 0 :(得分:1)
您可以通过从输入文本中删除它们来隐式忽略它们。
因此,用""
(空文本)替换所有出现次数:
fullName = fullName.replaceAll(" ", "");
此致电话fullName
将不再包含空白。
然而,当您分割空格时,您的逻辑会出现问题。
替代方法可以是首先trim
文字(删除前导和尾随 空格)。然后执行拆分,然后删除所有其他空格:
fullName = kybd.nextLine();
// Remove leading and trailing whitespaces
fullName = fullName.trim();
// Bounds
firstSpace = fullName.indexOf(" ");
lastSpace = fullName.lastIndexOf(" ");
// Extract names
String fullFirstName = fullName.substring(0, firstSpace);
String fullSecondName = fullName.substring(firstSpace + 1, lastSpace);
String fullSurname = fullName.substring(lastSpace + 1);
// Trim everything
fullFirstName = fullFirstName.trim(); // Not needed
fullSecondName = fullSecondName.trim();
fullSurname = fullSurname.trim();
// Get initials
firstName = fullFirstName.charAt(0);
secondName = fullSecondName.charAt(0);
surname = fullSurname.charAt(0);
我们来看一个示例输入(_
代表空白):
__John___Richard_Doe_____
我们将首先trim
fullName
,然后获得:
John___Richard_Doe
现在我们确定第一个和最后 空白并拆分它们:
First name: John
Second name: ___Richard
Surname: _Doe
最后我们还修剪所有内容并得到:
First name: John
Second name: Richard
Surname: Doe
使用charAt(0)
我们可以访问缩写:
First name: J
Second name: R
Surname: D
另一种更动态的方法是将所有连续的空格合并到单个空白中。因此,您需要从左到右遍历文本并在看到空格后开始录制,如果访问非空白字符则结束录制,然后替换该部分一个空格。
我们的例子是:
_John_Richard_Doe_
在额外trim
之后,您可以再次使用常规方法:
John_Richard_Doe
或者您可以使用split(" ")
,然后拒绝每为空 String
:
Iterator<String> elements = Pattern.compile(" ").splitAsStream(fullName)
.filter(e -> !e.isEmpty()) // Reject empty elements
.collect(Collectors.toList()) // Collect to list
.iterator() // Iterator
firstName = elements.next().charAt(0);
secondName = elements.next().charAt(0);
surname = elements.next().charAt(0);
再次使用该示例,Stream
首先包含
"", "", "John", "", "", "Richard", "Doe", "", "", "", "", ""
过滤后
"John", "Richard", "Doe"
正如你所说,你也想要
Richard Jack Smith-Adams
输出RJS-A
,您可以在分割空白之后在-
上拆分。
Pattern spacePatt = Pattern.compile(" ");
Pattern minusPatt = Pattern.compile("-");
String result = spacePatt.splitAsStream(fullName) // Split on " "
.filter(e -> !e.isEmpty()) // Reject empty elements
.map(minusPatt::splitAsStream) // Split on "-"
.map(stream ->
stream.map(e -> e.substring(0, 1))) // Get initials
.map(stream ->
stream.collect(Collectors.joining("-"))) // Add "-"
.collect(Collectors.joining("")); // Concatenate
哪个输出RJS-A
。
这种方法有点复杂,因为我们需要维护子流的信息,我们不能只将flatMap
所有内容放在一起,否则我们不知道在哪里添加{{1}再次。所以在中间部分我们确实在-
个对象上运行。
答案 1 :(得分:0)
我认为你在此之后的是split method in String
您可以这样使用:
4
您可能需要的另一件事是trim method,它会从字符串的正面和背面删除空格。
String fullName = "John Alexander Macdonald";
String[] split = fullName.split(" "); // ["John", "Alexander", "Macdonald"]