检查Java中的字符串格式?

时间:2012-03-07 19:56:44

标签: java string

因为我错过了一两节课,因此我在上课时遇到了问题。 (我知道它会瞧不起做某人的家庭作业,但我并不是在寻找那个。)

作业如下:

编写程序以执行以下操作:

  • 提示输入某人的第一个,中间名和姓氏作为单个字符串(使用大写和小写字母的任意组合)。
  • 检查以确保以正确的格式输入名称(3个名称以空格分隔)。如果输入不正确,请继续再次请求输入,直到格式正确。
  • 仅将名称的每个部分的首字母大写,并打印出修订后的名称。
  • 打印出该名称的缩写。
  • 以下列格式打印名称:姓氏,名字,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。我必须使用子字符串方法。

任何帮助将不胜感激。谢谢。 :d

5 个答案:

答案 0 :(得分:5)

指向正确的方向以找到名字(因为您无法使用数组):

String firstName = input.substring(0, input.indexOf(" "));

这将为您提供从开始到第一个空格的子字符串。如果你研究indexOf和substring方法,你应该能够从那里开始。

答案 1 :(得分:0)

您可以使用String类的substring和indexOf函数来获取所需的内容。

String#indexOf:获取字符串中String的位置。

String#substring:获取字符串中包含的子字符串。

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.

答案 2 :(得分:0)

如果您知道如何使用正则表达式,请查看匹配方法。如果不考虑indexOf和substring方法。

http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/String.html

答案 3 :(得分:0)

使用while循环连续检查用户是否输入了由3个部分组成的字符串,这些部分通过单个空格字符' '分隔,然后使用split()函数验证3个字符串部分。通过使用此处演示的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());
    }
}

答案 4 :(得分:0)

这可以使用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);
}