2016-04-24 2 views
0

Таким образом, программа должна принимать дату в формате «yyyy/dd/mm». После каждой даты есть текст, который можно ввести. Например, «1776/7/4 Первый день независимости». Я хотел использовать токенизатор String и разделить дату на косые черты, но затем я смущен, как разбить его на пробел после этого. Как только я раскол их, я смогу сравнить даты с другими датами правильно?Сплит. Пользователь вводит даты в Java

Scanner sc = new Scanner(System.in); 
    System.out.print("Enter the first date: "); 
    String firstDate = sc.nextLine(); 
    //System.out.print("Enter the second date: "); 
    //String secondDate = sc.nextLine(); 
    //System.out.println(); 
    //StringTokenizer date = new StringTokenizer(firstDate, "/",false); 
    //StringTokenizer space = new StringTokenizer(firstDate, " ",false); 
    //if (firstDate.equals(secondDate)) 
    //{ 
    // System.out.println (
     //   "There are 0 year(s), 0 month(s) and 0 day(s) between dates"); 
    //} 
    int firstSpace = firstDate.indexOf(' '); 

    String event = firstDate.substring(firstSpace + 1); // "First Independence Day" 

    String date = firstDate.substring(0, firstSpace); // "1776/7/4" 

    // split on '/' 
    String dateParts[] = date.split("/"); 
    String dateParts1[] = date.split("/"); 
    String dateParts2[]= date.split("/"); 
    if(dateParts1[1].length() != 2) 
     dateParts1[1] = "0" + dateParts1[1]; 

    // add 0 to front of day 
    if(dateParts1[2].length() != 2) 
     dateParts1[2] = "0" + dateParts1[2]; 

    // do the same for the second date 
    if(dateParts2[1].length() != 2) 
     dateParts2[1] = "0" + dateParts2[1]; 

    // convert array to string 
    String date1 = String.join("/", dateParts1); 
    String date2 = String.join("/", dateParts2); 

    // set up the format that you have 
    SimpleDateFormat dateFormat = new SimpleDateFormat ("yyyy/MM/dd"); 

    Date d1 = dateFormat.parse(date1); 
    Date d2 = dateFormat.parse(date2); 

    // equal dates 
    if(d1.equals(d2)) { 
     // There or 0 days, months and years between dates. 
    } 

ответ

-1

просто использовать splite как этот

строки данных;

string [] parts;

parts = data.splite ('');

+1

Вы могли бы написать 'split' правильно –

0
String x = "yyyy/dd/mm"; 
String[] split = x.split("/"); 
for (String s : split) { 
    System.out.println(s); 
} 


Output: 
yyyy 
dd 
mm 
0

Я думаю, было бы неплохо получить индекс первого символа пробела.

String text = "1776/7/4 First Independence Day"; 
        ^

int firstSpace = text.indexOf(' '); 

String event = text.substring(firstSpace + 1); // "First Independence Day" 

String date = text.substring(0, firstSpace); // "1776/7/4" 

// split on '/' 
String dateParts[] = date.split("/"); 

Это будет гарантировать, что все работает, даже если имя события содержит /.

Редактировать.

Факс:

Для того, чтобы сравнить даты, вам нужно будет, чтобы у месяцах April было значение 04 и не указано 4. Скачайте, у вас есть 2 массива, dateParts1 и dateParts2.

// add 0 to front of month 
if(dateParts1[1].length() != 2) 
    dateParts1[1] = "0" + dateParts1[1]; 

// add 0 to front of day 
if(dateParts1[2].length() != 2) 
    dateParts1[2] = "0" + dateParts1[2]; 

// do the same for the second date; 

// convert array to string 
String date1 = String.join("/", dateParts1); 
String date2 = String.join("/", dateParts2); 

// set up the format that you have 
SimpleDateFormat dateFormat = new SimpleDateFormat ("yyyy/MM/dd"); 

Date d1 = dateFormat.parse(date1); 
Date d2 = dateFormat.parse(date2); 

// equal dates 
if(d1.equals(d2)) { 
    // do something 
} 

if(date2.after(date1)) 
    return true; 
else 
    return false; 

Edit 2.

String firstDate = "1776/7/4 First Independence Day"; 

int firstSpace = firstDate.indexOf(' '); 

String event = firstDate.substring(firstSpace + 1); // "First Independence Day" 

String date = firstDate.substring(0, firstSpace); // "1776/7/4" 

String dateParts1[] = date.split("/"); 
String dateParts2[] = date.split("/"); 

// add 0 to front of month 
if (dateParts1[1].length() != 2) 
    dateParts1[1] = "0" + dateParts1[1]; 

// add 0 to front of day 
if (dateParts1[2].length() != 2) 
    dateParts1[2] = "0" + dateParts1[2]; 

// do the same for the second date 
if (dateParts2[1].length() != 2) 
    dateParts2[1] = "0" + dateParts2[1]; 

// add 0 to front of day 
if (dateParts2[2].length() != 2) 
    dateParts2[2] = "0" + dateParts2[2]; 

// convert array to string 
String date1 = String.join("/", dateParts1); 
String date2 = String.join("/", dateParts2); 

// set up the format that you have 
java.text.SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd"); 

java.util.Date d1 = dateFormat.parse(date1); 
java.util.Date d2 = dateFormat.parse(date2); 

if (d1.equals(d2)) 
    System.out.println("equal"); 
+0

@DesbosmitRay Спасибо, поэтому я распечатываю дату из этого, и это дает мне только дату. Однако какова логика сравнения года, месяца и дня с другой датой? –

+0

@JohnDoe First, сравнение по годам. Если в том же году, сравнить по месяцам. Если в том же году и месяце, сравните по дате. Для сравнения значений вы можете использовать '[string1] .compareTo ([string2])'. Это помогает? –

+0

@DesbosmitRay Да, я понимаю эту часть. Наверное, я смущен тем, как просто извлечь год, когда он будет расколот. –

0

Я бы рекомендовал регулярное выражение и DateFormat ...

String input = "1776/07/04 First Independence Day"; 
Pattern pattern = Pattern.compile("(\\d+/\\d+/\\d+)\\s+(.*)"); 
Matcher matcher = pattern.matcher(input); 
if (matcher.find()) { 
    DateFormat format = new SimpleDateFormat("yyyy/M/d"); 
    Date date = format.parse(matcher.group(1)); 
    System.out.println(date + " " + matcher.group(2)); 
} 
0

Я не совсем понимаю ваш вопрос. Вы можете просто взять первый токен, который является датой, и сохранить его в новой строке, а затем вы можете просто сравнить его с помощью string.compareTo (еще одна строка); или вы можете взять год, месяц и день как целые числа, используя просто scanner.nextInt(): метод, а затем сравнить их! Надеюсь, я помог.

+0

Это не ответ. 'Я не совсем понимаю ваш вопрос'. Раздел комментариев используется для запроса разъяснений. –

Смежные вопросы