如何从一个字符串中解析出日期格式的字符串? 如果除了时间中间是一个空格,其余全是两个或两个以上个空格的话,直接用s.split("\\s{2,}");分割就行~~~否则的话,先把两个或两个以上的空格替换成一个空格s.replaceAll("\\s{2,}"," ");然后再作处理~~~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 假设他们之间是用4个空格分开的String test = "2005-03-26 00:06:23 abc def 123.45 20050326"; String[] aa = test.split(" "); //定义的按照4个空格来分割这些字符串 for(int i = 0 ; i <aa.length;i++){ System.out.println(aa[i]); } 先用s.split("\\s{1,}")分割,然后循环用得到的数组的前项 + " " + 后项,判断加出来的字符串是否为日期 String test = "2005-03-26 00:06:23 abc def 123.45 20050326"; String[] aa = test.split(" "); aa[0]=aa[0]+aa[1];或 aa[0]=aa[0]+" "+aa[1]; String test = "2005-03-26 00:06:23 abc def 123.45 20050326"; String[] aa = test.split(" "); aa[0]=aa[0]+aa[1];或aa[0]=aa[0]+" "+aa[1]; "2005-03-26 00:06:23"和"abc"和"def"和"123.45"和"20050326"之间是以“一个或多个”空格格开的,不定的,时间中间是一个空格,所以觉得比较麻烦 String s = " 2005-03-26 00:06:23 abc def 123.45 20050326 ";s = s.trim().replaceAll("\\s{2,}", " ");String[] ss = s.split("[0-9]{4,4}-[0-9]{2,2}-[0-9]{2,2} [0-9]{2,2}:[0-9]{2,2}:[0-9]{2,2}");String[] sss = null;for (int i = 0; i < ss.length; i++) { if (ss[i].trim().length() != 0) { sss = ss[i].trim().split(" "); } s = s.replaceAll(ss[i],"");}String[] ssss = new String[sss.length + 1];ssss[0] = s;for (int i = 1; i < ssss.length ; i++) { ssss[i] = sss[i-1];} String string=" 2005-03-26 00:06:23 abc def 123.45 20050326 ";String []str=string.split("\\s+";\\s是正则表达式,表示任何形式的空格+表示一个或多个 楼主可以用一下StringTokenizer() 这个函数也是用来拆分字符串的! 用jFresH_MaN(TM)说的正则式String[] aa = test.split("\\s+"); 按照空格进行分组,然后再把被拆开的2005-03-26与00:06:23合并起来,这样做就是需要知道这个时间在字符串中的具体位置了。 s.replaceAll("\\s{2,}"," ");---->是把两个或两个以上的空格替换成一个空格;我想把一个空格替换成两个空格是:s.replaceAll("\\s{1,1}"," ");吗?好像不对,要怎么写? 直接写s.replaceAll(" "," "); 非常感谢各位的提示,解决了该问题,代码如下,仅供参考。-------------------------------------------------------------------- /** * 使用正则表达式来解析一个字符串,放到一个数组中。 <br> * 1.源字符串以一个或多个空白字符作为间隔符; <br> * 2.源字符串中包含日期格式的字符串; <br> * 3.日期格式的字符串虽然包含有一个空格,但该空格不作为间隔符。 * * @param source源字符串 * @return String[] 解析后的结果数组 */ public static String[] parseStr2ArrayByRule(String source) { /** * 本方法目的: <br> * 将字符串"aaa bbb 2005-03-26 00:06:23 123.45 ccc2005-03-26 00:06:23ddd " * 解析成{"aaa", "bbb", "2005-03-26 00:06:23", "123.45", "ccc2005-03-26 * 00:06:23ddd"} * * 本方法的实现思想: <br> * 1)将源字符串中的两个或两个以上的空格替换成一个空格; <br> * 2)根据正则表达式解析日期型的字符串,该字符串虽然包含空格,但认为是一个整体; <br> * 3)组织一个中间字符串,该字符串以两个空格作为间隔符; <br> * 4)将中间字符串按两个空格来拆分,放到一个数组中。 */ /*------------------------------------------------------------------------* * 1)将源字符串中的两个或两个以上的空格替换成一个空格 *------------------------------------------------------------------------*/ source = source.trim().replaceAll("\\s{2,}", " "); /*------------------------------------------------------------------------* * 2)使用正则表达式 *------------------------------------------------------------------------*/ Pattern p = Pattern.compile(YYYYMMDD_HHMMSS); /*------------------------------------------------------------------------* * 3)组织一个中间字符串,该字符串以两个空格作为间隔符 *------------------------------------------------------------------------*/ //起始位置 int start = 0; //结束位置 int end = 0; //中间字符串 String resultStr = ""; for (int i = 0; i < source.length(); i++) { Matcher m = p.matcher(source); if (m.find(i)) { //匹配到字符串的时候 start = m.start(); end = m.end(); //截取满足正则表达式之前的部分 String tempStr = source.substring(0, start); if (start > 0) { //把一个空格(该空格为间隔符)替换成两个空格 tempStr = tempStr.replaceAll("\\s{1,1}", " "); } //满足正则表达式的日期型字符串 String dateStr = source.substring(start, end); //截取满足正则表达式之后的部分 source = source.substring(end, source.length()); //组织中间字符串 resultStr += tempStr + dateStr; //重置循环子 i = 0; } else { //没有匹配到对应字符串的时候 //把一个空格(该空格为间隔符)替换成两个空格 source = source.replaceAll("\\s{1,1}", " "); //组织中间字符串 resultStr += source; break; } } /*------------------------------------------------------------------------* * 4)将中间字符串按两个空格来拆分,放到一个数组中 *------------------------------------------------------------------------*/ String[] result = resultStr.split("\\s{2,}"); return result; } 上面的YYYYMMDD_HHMMSS: private static final String YYYYMMDD_HHMMSS = "\\d{4}-\\d{2}-\\d{2}\\s\\d{2}:\\d{2}:\\d{2}";-------------------------------结帖! java api 文档 求助 请求帮忙解决这个小问题 如何用Java测试教育网出国代理的速度 Java框架学习网站Java99满月了,散分 ·JAVA高手请教一下,如何在window界面里显示一个dialog提示框,怎么办? Java的class文件怎么样编译成exe文件? jdk安装过后,输入javac运行不了,而输入java可以 java的怪问题?在线等待。。。。。。 请问:java中如何实现C++中的sizeof()方法? 紧急求助在网页中如何显示用java编写的applet (菜鸟)JAVA写的程序怎么能像EXE那样直接运行?
String test = "2005-03-26 00:06:23 abc def 123.45 20050326";
String[] aa = test.split(" "); //定义的按照4个空格来分割这些字符串
for(int i = 0 ; i <aa.length;i++){
System.out.println(aa[i]);
}
String[] aa = test.split(" ");
aa[0]=aa[0]+aa[1];或 aa[0]=aa[0]+" "+aa[1];
String[] aa = test.split(" ");
aa[0]=aa[0]+aa[1];或aa[0]=aa[0]+" "+aa[1];
s = s.trim().replaceAll("\\s{2,}", " ");
String[] ss = s.split("[0-9]{4,4}-[0-9]{2,2}-[0-9]{2,2} [0-9]{2,2}:[0-9]{2,2}:[0-9]{2,2}");
String[] sss = null;
for (int i = 0; i < ss.length; i++) {
if (ss[i].trim().length() != 0) {
sss = ss[i].trim().split(" ");
}
s = s.replaceAll(ss[i],"");
}
String[] ssss = new String[sss.length + 1];
ssss[0] = s;
for (int i = 1; i < ssss.length ; i++) {
ssss[i] = sss[i-1];
}
String []str=string.split("\\s+";\\s是正则表达式,表示任何形式的空格
+表示一个或多个
--------------------------------------------------------------------
/**
* 使用正则表达式来解析一个字符串,放到一个数组中。 <br>
* 1.源字符串以一个或多个空白字符作为间隔符; <br>
* 2.源字符串中包含日期格式的字符串; <br>
* 3.日期格式的字符串虽然包含有一个空格,但该空格不作为间隔符。
*
* @param source源字符串
* @return String[] 解析后的结果数组
*/
public static String[] parseStr2ArrayByRule(String source) { /**
* 本方法目的: <br>
* 将字符串"aaa bbb 2005-03-26 00:06:23 123.45 ccc2005-03-26 00:06:23ddd "
* 解析成{"aaa", "bbb", "2005-03-26 00:06:23", "123.45", "ccc2005-03-26
* 00:06:23ddd"}
*
* 本方法的实现思想: <br>
* 1)将源字符串中的两个或两个以上的空格替换成一个空格; <br>
* 2)根据正则表达式解析日期型的字符串,该字符串虽然包含空格,但认为是一个整体; <br>
* 3)组织一个中间字符串,该字符串以两个空格作为间隔符; <br>
* 4)将中间字符串按两个空格来拆分,放到一个数组中。
*/ /*------------------------------------------------------------------------*
* 1)将源字符串中的两个或两个以上的空格替换成一个空格
*------------------------------------------------------------------------*/
source = source.trim().replaceAll("\\s{2,}", " "); /*------------------------------------------------------------------------*
* 2)使用正则表达式
*------------------------------------------------------------------------*/
Pattern p = Pattern.compile(YYYYMMDD_HHMMSS); /*------------------------------------------------------------------------*
* 3)组织一个中间字符串,该字符串以两个空格作为间隔符
*------------------------------------------------------------------------*/
//起始位置
int start = 0;
//结束位置
int end = 0;
//中间字符串
String resultStr = "";
for (int i = 0; i < source.length(); i++) {
Matcher m = p.matcher(source);
if (m.find(i)) {
//匹配到字符串的时候
start = m.start();
end = m.end();
//截取满足正则表达式之前的部分
String tempStr = source.substring(0, start);
if (start > 0) {
//把一个空格(该空格为间隔符)替换成两个空格
tempStr = tempStr.replaceAll("\\s{1,1}", " ");
}
//满足正则表达式的日期型字符串
String dateStr = source.substring(start, end);
//截取满足正则表达式之后的部分
source = source.substring(end, source.length());
//组织中间字符串
resultStr += tempStr + dateStr;
//重置循环子
i = 0;
} else {
//没有匹配到对应字符串的时候
//把一个空格(该空格为间隔符)替换成两个空格
source = source.replaceAll("\\s{1,1}", " ");
//组织中间字符串
resultStr += source;
break;
}
} /*------------------------------------------------------------------------*
* 4)将中间字符串按两个空格来拆分,放到一个数组中
*------------------------------------------------------------------------*/
String[] result = resultStr.split("\\s{2,}");
return result;
}
private static final String YYYYMMDD_HHMMSS = "\\d{4}-\\d{2}-\\d{2}\\s\\d{2}:\\d{2}:\\d{2}";-------------------------------
结帖!