2012-03-07 96 views
3

在为我正在参加的课程做某些事情时遇到问题,因为我错过了一两节课。 (我知道这是看不起“做别人的功课,”但我不找那个。)在Java中检查字符串格式?

的分配如下:

写一个程序,请执行下列操作:

  • 提示输入某人的第一个,中间和最后一个名字作为单个字符串(使用大写和小写字母的任意组合)。
  • 检查以确保名称的输入格式正确(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”之类的东西。我认为这将是某种循环来检查名称的输入。

catch 22,是我不能使用数组或StringTokenizer。我必须使用子串方法。

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

+3

虽然我不是做别人作业的大爱好者。查看String类的方法http://docs.oracle.com/javase/6/docs/api/java/lang/String.html注意substring和indexof方法。 – 2012-03-07 20:02:48

+1

查看正则表达式,这将是你放学后很长一段时间的朋友 – bluesman 2012-03-07 20:03:58

+0

@Steven Hickey你应该尝试一下我的代码。 – Juvanis 2012-03-07 20:26:57

回答

0

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

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

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. 
+1

OP表示他不能使用数组,而需要使用子串方法。 – jzworkman 2012-03-07 20:04:25

+0

@jzworkman是的我在最后读到,编辑我的回答 – 2012-03-07 20:08:27

5

为你指出正确的方向找到的第一个名字(因为你不能使用数组):

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

这将让你从开始到第一个空间的子串。如果你研究indexOf和substring方法,你应该可以从那里去。

+1

+1阅读OP的问题,并没有为他完成他的任务 – 2012-03-07 20:06:53

0

使用一个while循环来连续地检查用户是否输入了由3个部分组成,它们通过单个空格字符分隔' ',然后使用split()函数来验证3份字符串的字符串。通过使用substring()这里演示了seperately得到名称:

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()); 
    } 
} 
+0

如果您阅读完整的问题OP说他不能使用数组并且必须使用子字符串。 – jzworkman 2012-03-07 20:11:27

+0

@jzworkman编辑我的答案,现在完全有效。 – Juvanis 2012-03-08 07:23:30

0

这个工程使用模式/匹配器和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); 
}