Как удалить все символы после одного символа в строке? - PullRequest
16 голосов
/ 14 февраля 2012

У меня есть строка, которая содержит дату, например «01-01-2012», затем пробел, а затем время «01:01:01». Полная строка: «01-01-2012 01:01:01»

Я бы хотел извлечь из этой строки только дату, поэтому в конце у меня будет "01-01-2012", но я не знаю, как это сделать.

Ответы [ 12 ]

38 голосов
/ 14 февраля 2012

Четыре варианта (последние два добавлены, чтобы этот ответ включал параметры, заданные другими):

  • Анализировать все как дату / время, а затем просто взять часть даты (время Joda Time)или SimpleDateFormat)
  • Найдите первый пробел с помощью indexOf и получите ведущую подстроку с помощью substring:

    int spaceIndex = text.indexOf(" ");
    if (spaceIndex != -1)
    {
        text = text.substring(0, spaceIndex);
    }
    
  • Поверьте, что этодопустимо в указанном формате, и что первый пробел всегда будет с индексом 10:

    text = text.substring(0, 10);
    
  • Разделить строку на пробелы и затем взять первый результат (мне кажется, излишне неэффективным, но это сработает ...)

    text = text.split(" ")[0];
    

Вы должны подумать о том, что вы хотите, чтобы произошло, если не пробел тоже.Означает ли это, что данные были недействительными для начала?Должны ли вы просто продолжить всю строку?Это будет зависеть от вашей ситуации.

Лично я бы, вероятно, выбрал первый вариант - действительно ли вы хотите разобрать «01.01.2012 wibble-wobble bad data», как если бы это была действительная дата / время

13 голосов
/ 14 февраля 2012
String input = "01-01-2012 01:01:01";
String date = d.split(" ")[0];
6 голосов
/ 14 февраля 2012

Попробуйте это:

String date = s.substring(0, s.indexOf(" "));

Или даже (потому что длина фиксирована):

String date = s.substring(0, 10);

Или используйте StringUtils.substringBefore():

String date = StringUtils.substringBefore(s, " ");
2 голосов
/ 14 февраля 2012

Множество способов сделать это, очень простой способ - разделить строку на пробел и использовать первую часть (которая будет датой):

String dateTime = "01-01-2012 01:01:01";
String date = dateTime.split(" ")[0];
1 голос
/ 14 февраля 2012

Вы можете сделать это либо с помощью API для работы со строками:

String datetime =  "01-01-2012 01:01:01";
int spacePos = datetime.indexOf(" ");
if (spacePos > 0) {
   String date = datetime.substring(0, spacePos - 1);
}

, либо с помощью регулярного выражения:

Pattern p = Pattern.compile("(\\d{2}-\\d{2}-\\d{4})");
String datetime =  "01-01-2012 01:01:01";
Matcher m = p.matcher(datetime);
if(m.find()) {
   String date = m.group(1);
}

, либо с помощью SimpleDateFormat

DateFormat fmt = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
Date date = fmt.parse(datetime);
Calendar c = Calendar.getInstance();
c.setTime(date);
String date = c.getDayOfMonth() + "-" + c.getMonth() + "-" + c.getYear();
1 голос
/ 14 февраля 2012

Если вы заранее знаете, что это формат строки, я бы сделал это:

public String getDateOnly(String fullDate){
    String[] spl = fullDate.split(" ");
    return spl[0];
} 
1 голос
/ 14 февраля 2012

Вы можете использовать подстроку только для извлечения даты:

 String thedatetime = "01-01-2012 01:01:01";
 String thedateonly = thedate.substring(0, 10);

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

1 голос
/ 14 февраля 2012

В том случае, если в строке только один пробел, вы можете использовать String.split(" ").Но это плохая практика.Вы должны проанализировать дату с помощью DateFormat .

1 голос
/ 14 февраля 2012

Вы можете использовать String.split() и взять только соответствующий String в вашем результате String[] [в вашем примере это будет myString.split(" ")[0]

0 голосов
/ 06 февраля 2016

Если вы хотите взорвать полную дату из строки, используйте этот метод.

/**
 * @param dateTime format string
 * @param type type of return value : "date" or "time"
 * @return String value
 */

private String getFullDate(String dateTime, String type) {
    String[] array = dateTime.split(" ");
    if (type == "time") {
        System.out.println("getDate: TIME: " + array[1]);
        return array[1];

    } else if (type == "date") {
        System.out.println("getDate: DATE: " + array[0]);
        return array[0];
    } else {
        System.out.println("NULL.");
        return null;
    }
}

В противном случае, если вы хотите указать только дату объяснения 01 -01-2012

используйте это:

/**
 * @param datetime format string
 * @return
 */
private String getOnlyDate(String datetime) {
    String array[] = datetime.split("-");
    System.out.println("getDate: DATE: " + array[0]);

    return array[0];

}

Надеюсь, мой ответ вам поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...