Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中检查字符串格式?_Java_String - Fatal编程技术网

在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的问题,而不是为他做作业。