Проверка форматов строк в Java? - PullRequest
3 голосов
/ 07 марта 2012

у меня проблемы с подготовкой к уроку, который я посещаю, так как я пропустил урок или два.(Я знаю, что на него смотрят свысока, чтобы «сделать чье-то домашнее задание», но я этого не ищу.)

Задание выглядит следующим образом:

Напишите программу для выполнения следующих действий:

  • Запрашивать ввод имени, отчества и фамилии кого-либо в виде одной строки (используя любую комбинацию прописных и строчных букв).
  • Убедитесь, что имя введено в правильном формате (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();




}
}

Из того, что я собрал, мне нужно использовать строку.Трещина?Однако я не знаю, как это сделать, поскольку мне нужно проверить, чтобы убедиться, что есть три пробела, которые не просто расположены рядом друг с другом или чем-то, например, «Джон (три пробела) Доу».Я предполагаю, что это будет своего рода цикл для проверки ввода имени.

Подвох 22 в том, что я не могу использовать массивы или StringTokenizer.Я должен использовать метод подстроки.

Любая помощь будет принята с благодарностью.Благодарю.: D

Ответы [ 5 ]

5 голосов
/ 08 марта 2012

Чтобы указать вам правильное направление, чтобы найти имя (поскольку вы не можете использовать массивы):

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

Это даст вам подстроку от начала до первого пробела.Если вы исследуете методы indexOf и substring, вы сможете перейти оттуда.

0 голосов
/ 08 марта 2012

Это работает с использованием Pattern / Matcher и регулярных выражений. Также защищает от струн длиной 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);
}
0 голосов
/ 08 марта 2012

Используйте цикл 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());
    }
}
0 голосов
/ 08 марта 2012

Посмотрите на метод совпадений, если вы знаете, как использовать регулярные выражения. Если нет, подумайте о методах indexOf и подстроки.

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

0 голосов
/ 08 марта 2012

Вы можете использовать подстроку и функции indexOf класса String, чтобы получить то, что вам нужно.

String # indexOf : Получить позицию строки внутри строки.

String # substring : Получить подстроку, содержащуюся в String.

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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...