在Java中检查字符串格式?
因为我错过了一两节课,所以在为我正在上的课做一些事情时遇到了问题。(我知道‘做别人的家庭作业’被人看不起,但我不想这样。) 任务如下: 编写一个程序以执行以下操作:在Java中检查字符串格式?,java,string,Java,String,因为我错过了一两节课,所以在为我正在上的课做一些事情时遇到了问题。(我知道‘做别人的家庭作业’被人看不起,但我不想这样。) 任务如下: 编写一个程序以执行以下操作: 提示以单个字符串形式输入某人的名字、中间名和姓氏(使用大小写字母的任意组合) 检查以确保输入的名称格式正确(3个名称之间用空格分隔)。如果输入不正确,继续再次请求输入,直到格式正确 仅将名称各部分的首字母大写,并打印出修改后的名称 打印出那个名字的首字母 以以下格式打印名称:Lastname、Firstname、MI 我遇到的主
- 提示以单个字符串形式输入某人的名字、中间名和姓氏(使用大小写字母的任意组合)李>
- 检查以确保输入的名称格式正确(3个名称之间用空格分隔)。如果输入不正确,继续再次请求输入,直到格式正确
- 仅将名称各部分的首字母大写,并打印出修改后的名称
- 打印出那个名字的首字母
- 以以下格式打印名称:Lastname、Firstname、MI
import java.util.*;
public class TestStrings
{
public static void main(String[] args)
{
Scanner key = new Scanner(System.in);
String name;
System.out.print("Enter your name as 'First Middle Last': ");
name = key.nextLine();
}
}
根据我收集的信息,我需要使用string.split?不过,我不知道该怎么做,因为我需要检查以确保有三个空格,它们不是紧挨着彼此或类似“John(三个空格)Doe”之类的东西。我假设它将是某种循环,通过输入检查名称
第22个问题是,我不能使用数组或StringTokenizer。我必须使用substring方法
任何帮助都将不胜感激。谢谢D您可以使用String类的substring和indexOf函数来获取所需的内容 :获取字符串在字符串中的位置
String s = "Luiggi Mendoza J.";
String x;
while(s.indexOf(" ") > 0) {
x = s.substring(0, s.indexOf(" "));
System.out.println(x);
s = s.substring(s.indexOf(" ") + 1);
}
x = s;
System.out.println(x);
:Get是字符串中包含的子字符串
String s = "Luiggi Mendoza J.";
String x;
while(s.indexOf(" ") > 0) {
x = s.substring(0, s.indexOf(" "));
System.out.println(x);
s = s.substring(s.indexOf(" ") + 1);
}
x = s;
System.out.println(x);
程序输出将为:
Luiggi
Mendoza
J.
要将您指向正确的方向以查找名字(因为您不能使用数组):
这将获得从开始到第一个空格的子字符串。如果您研究indexOf和substring方法,您应该能够从那里开始。如果您知道如何使用regex,请查看matches方法。如果没有,请考虑indexOf和substring方法
使用while循环持续检查用户输入的字符串是否由三部分组成,这三部分通过单个空格字符分隔,然后使用
split()
函数验证字符串的三部分。通过使用此处演示的substring()
,您可以分别获得名称:
public static void main ( String [] args )
{
String name = "";
boolean ok = false;
Scanner key = new Scanner( System.in );
while ( !ok )
{
System.out.print( "Enter your name as 'First Middle Last': " );
name = key.nextLine();
try
{
if ( name.split( " " ).length == 3 )
ok = true;
}
catch ( Exception e ){ }
}
if ( ok )
{
String firstName = name.substring(0, name.indexOf(" "));
String middleName = name.substring(firstName.length()+1,
name.lastIndexOf(" "));
String surname = name.substring(middleName.length()+firstName.length()+2,
name.length());
}
}
这可以使用Pattern/Matcher和regexs工作。在调整外壳时,还可防止长度为1的字符串
private static String properCase(String str) {
return str.substring(0, 1).toUpperCase()
+ (str.length() >= 1 ? str.substring(1).toLowerCase() : "");
}
public static void main(String[] args) {
boolean found = false;
do {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter your name as 'First Middle Last': ");
Pattern p = Pattern.compile("\\s*(\\w+?)\\s(\\w+?)\\s(\\w+)+\\s*");
Matcher m = p.matcher(scanner.nextLine());
found = m.find();
if (found) {
String first = m.group(1);
String middle = m.group(2);
String last = m.group(3);
String revised = properCase(first) + " " + properCase(middle)
+ " " + properCase(last);
System.out.println(revised);
System.out
.printf("%s %s %s.\n", properCase(last),
properCase(first), middle.substring(0, 1)
.toUpperCase());
}
} while (!found);
}
虽然我不太喜欢做别人的家庭作业。查看String类的方法注意substring和indexof方法。查找regex,它将是您很长一段时间的朋友school@StevenHickey你绝对应该试试我的代码。@bluesman我不同意。在这个层次上,regexes会飞过他的头顶。他应该像躲避瘟疫一样躲避它们。至少现在是这样。OP说他不能使用数组,需要使用子字符串方法。如果你阅读完整的问题OP说他不能使用数组,必须使用子字符串,那么+1表示阅读OP的问题,而不是为他做作业。