如何删除字符串中某个字符后面的所有字符?

17

我有一个字符串,其中包含一个日期,例如 "01-01-2012",然后是一个空格和时间 "01:01:01"。完整的字符串为:"01-01-2012 01:01:01"。

我想从这个字符串中仅提取日期,最终可以得到 "01-01-2012",但不知道如何做。


1
看看codingbat吧 - 它提供了很多短小的练习来熟悉语言 :) - Andreas Dolk
12个回答

41

以下是四种选项(后两个选项添加是为了让此答案包含其他回答中提供的选项):

  • 将整个日期/时间解析为日期并仅获取日期部分(使用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”解析为有效的日期/时间吗?

text.substring(0, spaceIndex+1); - shift66
1
@Ademiban:为什么原帖作者想要保留末尾的空格?这对我来说似乎不太可能。 - Jon Skeet
text = text.split(" ", 2)[0]; <== 更快 - geowar

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

7

试试这个:

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

甚至可以使用固定长度的方式:
String date = s.substring(0, 10);

或者使用StringUtils.substringBefore()

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

@Ademiban:不,看起来我的版本(没有 +1)是正确的,我想我们不需要日期后面的空格。 - Tomasz Nurkiewicz

2

有很多方法可以做到这一点,一个非常简单的方法是在空格处拆分字符串并使用第一部分(即日期):

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

1

您可以使用substring仅提取日期:

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

你应该仔细阅读 String 的 javadoc,以了解可用的函数。

1
如果您事先知道字符串的格式,可以这样做:
public String getDateOnly(String fullDate){
    String[] spl = fullDate.split(" ");
    return spl[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();

1
你可以使用 String.split() 方法,并在结果的 String[] 中仅取相关的 String(例如,在你的示例中,它将是 myString.split(" ")[0])。

1
在只有一个空格的情况下,您可以使用 String.split(" ")。但这是一种不好的做法。您应该使用 DateFormat 解析日期。

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

否则,如果您只需要日期,例如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];

}

希望我的回答能够对您有所帮助。


请解释为什么您的解决方案有效,并提供注释以便更好地理解。 - user2004685

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接