在java中将字符串分隔为3个不同的字符串变量

在java中将字符串分隔为3个不同的字符串变量,java,string,date,split,substring,Java,String,Date,Split,Substring,我有一个字符串变量作为日期类型。例如: String myDate=“20130403” 我想把它分成3种不同的日期格式,如下所示: String myDay = "03"; String myMonth= "04"; String myYear= "2013"; 如何最快地分开我的绳子 谢谢如果您确实知道您的日期带有这样的格式yyyyMMdd,那么您可以使用此函数 String myDate = "20120221" String year = myDate.subString(0,4);

我有一个字符串变量作为日期类型。例如:
String myDate=“20130403”
我想把它分成3种不同的日期格式,如下所示:

String myDay = "03";
String myMonth= "04";
String myYear= "2013";
如何最快地分开我的绳子


谢谢

如果您确实知道您的日期带有这样的格式
yyyyMMdd
,那么您可以使用此函数

String myDate = "20120221"

String year = myDate.subString(0,4);
String month = myDate.subString(4,6);
String day = myDate.subString(6);

如果这是固定格式,只需使用子字符串

    String myDate= "20130403";
    String myYear = myDate.substring(0,4);
    String myMonth= myDate.substring(4,6);
    String myDay= myDate.substring(6,8);

    System.out.println(myDay);
    System.out.println(myMonth);
    System.out.println(myYear);

如果数据字符串格式不会更改,则可以使用子字符串:

String myDate= "20130403";

String myDay = myDate.substring(6,8);
String myMonth = myDate.substring(4,6);
String myYear = myDate.substring(0,4);

我想您应该为此使用special。

如果字符串具有固定长度(例如,年份始终为4位,月份始终为2位,等等),则可以使用substring()方法

就你而言:

String myDate = "20130403";
String myYear = myDate.substring(0,4);
String myMonth = myDate.substring(4,6);
String myDay = myDate.substring(6,8);
如果字符串不是固定长度,可以尝试使用分隔符,例如“-”。因此,您的字符串看起来像“2013-04-03”,然后只需使用string.split();功能

例如:

String myDate = "2013-04-03";
String[] myDateElements = myDate.split("-");
String myYear = myDateElements[0];
String myMonth = myDateElements[1];
String myDay = myDateElements[2];

您可以使用SimpleDataFormat将字符串解析为日期,并使用日历获取所需的所有字段

    String myDate= "20130403";

    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    try {
        Calendar cal = Calendar.getInstance();
        cal.setTime(sdf.parse(myDate));

        String myDay = (String)cal.get(Calendar.DATE);
        String myMonth = (String)(cal.get(Calendar.MONTH)+1);
        String myYear = (String)cal.get(Calendar.YEAR);
    } catch (ParseException e) {
        e.printStackTrace();
    }

你在尝试子串吗?像这样(我认为最好的方式也是最快的):


子字符串可能执行该任务,但不是最快的方式。 子字符串为所有标记创建新的字符串对象,因此不是性能有效或最快的方法。下面是java src中subString()的源代码

public String More ...substring(int beginIndex, int endIndex) {
 if (beginIndex < 0) {
     throw new StringIndexOutOfBoundsException(beginIndex);
 }
 if (endIndex > count) {
     throw new StringIndexOutOfBoundsException(endIndex);
 }
 if (beginIndex > endIndex) {
     throw new StringIndexOutOfBoundsException(endIndex - beginIndex);
 }
 return ((beginIndex == 0) && (endIndex == count)) ? this :
     **new String(offset + beginIndex, endIndex - beginIndex, value);**
公共字符串更多…子字符串(int-beginIndex,int-endIndex){
如果(beginIndex<0){
抛出新的StringIndexOutOfBoundsException(beginIndex);
}
如果(结束索引>计数){
抛出新的StringIndexOutOfBoundsException(endIndex);
}
如果(beginIndex>endIndex){
抛出新的StringIndexOutOfBoundsException(endIndex-beginIndex);
}
返回((beginIndex==0)和(&(endIndex==count))?这是:
**新字符串(偏移量+开始索引,结束索引-开始索引,值)**
}

所以,最好的方法是,根据我的说法,使用正则表达式进行拆分

问候
Punith

假设您使用了“substring”标记,这意味着您知道该操作存在。。。所以不清楚为什么你不只是用它…如果你想找女孩,你可以用正则表达式,比如
(\\d{4})(\\d{2})(\\d{2})
。否则,String.substring应该起作用。子字符串结束索引是独占的,而不是包含的。@JonSkeet更改了我的错误这对于输入字符串myDay=myDate.substring(0,4)来说是完全错误的;字符串myMonth=myDate.substring(4,6);字符串myYear=myDate.substring(6,8);不,这将给出一个月的错误答案,而且它毫无理由地使用字符串连接。(使用
String.valueOf
作为一种更简洁的转换方式。)即使解决了这些问题,您也会在1月到9月或少于10天内得到一个一位数的字符串。基本上,这不是人们要求的。它甚至无法正确获取问题中的示例字符串。应该是
cal.setTime(currentDate)加上,它给了一天“3”,而不是“03”。但无论如何,使用SimpleDataFormat是一个好主意。还要注意的是,在
日历中月份是以零为基础的,因此您将得到4月份的“3”:-(
@Test
final public void testStringDateOperation() {
    final String myDate= "20130403";
  final String year = myDate.substring(0, 4);
    final String month = myDate.substring(4, 6);
    final String day = myDate.substring(6, 8);
    Logger.trace("year: {0} - month: {1} - day: {2}", year, month, day);
}
public String More ...substring(int beginIndex, int endIndex) {
 if (beginIndex < 0) {
     throw new StringIndexOutOfBoundsException(beginIndex);
 }
 if (endIndex > count) {
     throw new StringIndexOutOfBoundsException(endIndex);
 }
 if (beginIndex > endIndex) {
     throw new StringIndexOutOfBoundsException(endIndex - beginIndex);
 }
 return ((beginIndex == 0) && (endIndex == count)) ? this :
     **new String(offset + beginIndex, endIndex - beginIndex, value);**