2012-02-14 4 views
12

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

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

+1

Посмотрите на [codingbat] (http://codingbat.com/) - он предоставляет множество коротких упражнений, чтобы привыкнуть к языку :) –

ответ

36

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

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

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

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

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

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

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

+0

text.substring (0, spaceIndex + 1); – shift66

+0

Спасибо, будем использовать это. –

+1

@Ademiban: Почему OP хочет сохранить пространство в конце? Мне это кажется маловероятным. –

1

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

6

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

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

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

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

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

String date = StringUtils.substringBefore(s, " "); 
+0

@Ademiban: нет, похоже, что моя версия (без '+ 1') верна, я думаю, нам не понадобится конечное пространство после даты. –

12
String input = "01-01-2012 01:01:01"; 
String date = d.split(" ")[0]; 
0

Использование String.substring(int, int). Если вас интересует значение даты и времени, используйте SimpleDateFormatter для синтаксического анализа вашей строки.

1

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

0

myString.substring(0,10);

Если строка всегда в этом формате (2 цифры, минус, 2 цифры, минус, 4 цифры, пространство и т.д. ...), то вы можете использовать метод строки substring(int beginIndex, int endIndex), чтобы получить то, что вы хотите.
Обратите внимание, что вторым параметром является индекс символа после возвращающая подстрока.

1

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

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

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

1

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

public String getDateOnly(String fullDate){ 
    String[] spl = fullDate.split(" "); 
    return spl[0]; 
} 
2

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

String dateTime = "01-01-2012 01:01:01"; 
String date = dateTime.split(" ")[0]; 
1

Вы можете сделать это либо с помощью манипуляций со строками 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(); 
0

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

/** 
* @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; 
    } 
} 

В противном случае, если вы хотите только дату explample -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]; 

} 

Я надеюсь, что мой ответ поможет вам.

+0

Пожалуйста, объясните, почему ваши решения работают, а также предоставляют комментарии для лучшего понимания. – user2004685

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