2012-02-14 73 views
12

Tôi có một Chuỗi chứa ngày, ví dụ "01-01-2012", sau đó là một khoảng trắng và sau đó là thời gian "01:01:01". Chuỗi hoàn chỉnh là: "01-01-2012 01:01:01"Làm thế nào để xóa tất cả các ký tự sau một ký tự trong chuỗi?

Tôi muốn trích xuất chỉ ngày từ chuỗi này để cuối cùng tôi sẽ có "01-01-2012" nhưng không biết làm thế nào để làm điều này.

+1

Hãy xem [codingbat] (http://codingbat.com/) - nó cung cấp rất nhiều bài tập ngắn để làm quen với ngôn ngữ :) –

Trả lời

36

Bốn lựa chọn (qua hai thêm vào làm cho một câu trả lời này bao gồm các tùy chọn được đưa ra bởi những người khác):

  • Phân tích các điều toàn bộ như một ngày/giờ và sau đó chỉ cần lấy một phần ngày (Joda Thời gian hoặc SimpleDateFormat)
  • Tìm không gian đầu tiên sử dụng indexOf và nhận được chuỗi dẫn sử dụng substring:

    int spaceIndex = text.indexOf(" "); 
    if (spaceIndex != -1) 
    { 
        text = text.substring(0, spaceIndex); 
    } 
    
  • Tin tưởng rằng tôi t có giá trị trong các định dạng cụ thể, và rằng không gian đầu tiên sẽ luôn luôn được ở chỉ số 10:

    text = text.substring(0, 10); 
    
  • Chia chuỗi bằng dấu cách và sau đó lấy kết quả đầu tiên (có vẻ như không cần thiết không hiệu quả đối với tôi, nhưng nó sẽ làm việc ...)

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

bạn nên cân nhắc những gì bạn muốn xảy ra nếu có không phải là một không gian, quá. Điều đó có nghĩa là dữ liệu không hợp lệ để bắt đầu? Bạn có nên tiếp tục với toàn bộ chuỗi không? Nó sẽ tùy thuộc vào hoàn cảnh của bạn.

Cá nhân tôi có thể đi với tùy chọn đầu tiên - bạn có thực sự muốn phân tích cú pháp "01-01-2012 wibble-wobble bad data" như thể đó là ngày/giờ hợp lệ không?

+0

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

+0

Cảm ơn bạn, sẽ sử dụng điều này. –

+1

@Ademiban: Tại sao OP muốn giữ không gian ở cuối? Điều đó dường như không xảy ra với tôi. –

1

Bạn có thể sử dụng String.split() và chỉ mất có liên quan String trong resultng bạn String[] [trong ví dụ của bạn, nó sẽ được myString.split(" ")[0]

6

Hãy thử điều này:

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

Hoặc thậm chí (vì chiều dài là cố định) :

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

Hoặc sử dụng StringUtils.substringBefore():

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

@Ademiban: không, có vẻ như phiên bản của tôi (không có '+ 1') là chính xác, tôi đoán chúng tôi không cần dấu cách sau ngày. –

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

Sử dụng String.substring(int, int). Nếu bạn quan tâm đến giá trị của ngày và giờ, hãy sử dụng SimpleDateFormatter để phân tích chuỗi của bạn.

1

Trong trường hợp đó chỉ có một dấu cách trong chuỗi, bạn có thể sử dụng String.split(" "). Nhưng đây là một thực hành tồi. Bạn nên phân tích cú pháp ngày bằng một số DateFormat .

0

myString.substring(0,10);

Nếu chuỗi của bạn luôn luôn là ở định dạng đó (2 chữ số, trừ, 2 chữ số, trừ, 4 chữ số, không gian vv ...) thì bạn có thể sử dụng phương thức chuỗi substring(int beginIndex, int endIndex) để nhận được những gì bạn muốn.
Lưu ý rằng tham số thứ hai là chỉ số của ký tự sau trả về chuỗi con.

1

Bạn có thể sử dụng để trích xuất substring ngày chỉ:

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

Bạn thực sự nên đọc qua các javadoc cho String để bạn nhận thức được các chức năng có sẵn.

1

Nếu bạn biết trước đây là định dạng của chuỗi, tôi muốn làm điều này:

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

Rất nhiều cách để làm điều này, một phương pháp rất đơn giản là để phân chia các chuỗi vào không gian và sử dụng phần đầu tiên (đó sẽ là ngày):

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

Bạn có thể làm điều đó hoặc sử dụng chuỗi thao tác API:

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

hoặc sử dụng biểu thức chính quy:

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); 
} 

hoặc sử dụng 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

Nếu bạn muốn nổ tung những ngày tháng đầy đủ từ các chuỗi sử dụng phương pháp này.

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

Nếu không nếu bạn muốn chỉ ngày cho explample -01-2012

sử dụng này:

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

    return array[0]; 

} 

Tôi hy vọng câu trả lời của tôi sẽ giúp bạn.

+0

Vui lòng giải thích lý do giải pháp của bạn hoạt động và cũng cung cấp nhận xét để hiểu rõ hơn. – user2004685

Các vấn đề liên quan