我有ArrayList
日期。所有日期都采用以下格式:
“日月时间时区年”。一个例子看起来像这样, Wed Aug 10:15:17 AST 2016 。
我需要在第二个“:”分割字符串。这是我的代码。
int dateSize = date.size();
int i = 0;
ArrayList<String> splitDate = new ArrayList<String>();
splitDate.clear();
while(i < dateSize) {
String[] splitString = date.get(i).split(":" + 1);
splitDate.add(splitString[0]);
Log.i("info", String.valueOf(splitDate));
i++;
}
ArrayList
包含约50项。首先,这段代码有效。它将其打印到日志
9月14日星期三23:30 ,这就是我想要的。
然后,随机,它开始打印这个,
Wed Sep 14 23:30,Wed Sep 14 23:24:36 AST 2016,Wed Sep 14 23,Wed Sep 9月22日,星期三9月14日22日,9月13日星期二,9月13日星期二,9月13日星期二 22:07:33 AST 2016,周一9月12日20日
有时会分裂第二个“:”,有时会分裂第一个“:”,有时它不会分裂任何东西。我无法弄清楚为什么会这样。如果我将代码更改为此,
String[] splitString = date.get(i).split(":");
splitDate.add(splitString[0]);
它完美无瑕。所有内容都会打印到日志中, 8月10日星期三,没有例外。
我的方法是否正确?
答案 0 :(得分:1)
好的,首先这不是你想要的
String[] splitString = date.get(i).split(":" + 1);
这是在字符串“:1”
上拆分你要做的是拆分“:”,然后获取数组中的前两个条目并将它们连接起来
String[] splitString = date.get(i).split(":");
splitDate.add(splitString[0] + ":" + splitString[1]);
答案 1 :(得分:1)
正如其中一条评论所说,问题在于这一行
Network request failed
at XMLHttpRequest.xhr.onerror...
基本上你将会过去&#34;:1&#34;作为split()的参数。因此,您最终会选择&#34;:1&#34;的第一个实例,或者整个字符串,如果&#34;:1&#34;不存在。例如:
如果您知道字符串的格式,那么我只是这样做:
String[] splitString = date.get(i).split(":" + 1);
如果你不知道字符串的格式(例如,他们已被输入错误的用户输入),那么我就用正则表达式检查它们。
答案 2 :(得分:0)
如果你有一个数组元素的字符串格式为“Wed Aug 10:15:17 AST 2016”,你用“:”分割/分隔,你将得到以下字符串数组:
[0] Wed Aug 10
[1] 15
[2] 17 AST 2016
如果你看一下上面的数组,你就无法完成你所需的“Wed Aug 10 15:17”的输出,只需要分割字符串然后添加组件(即:你将错过上面例子中的'17' ,因为它属于元素[2])。
我不是Java开发人员,因此语法可能有点偏,但如果你想生成“Wed Aug 10 15:17”,那么我相信你正在寻找:
String[] splitString = date.get(i).split(":");\\remove "1" from your delimiter
String tempString = splitString[2].substring(0,1);
splitDate.add(splitString[0] + " " + splitString[1] + ":" + tempString);
在上面的代码片段中,tempString行从split string数组元素[2]获取前两个字符。然后使用tempString添加前两个数组元素(即:17)并获取输出。
编辑:我只想提一下,如果您可以控制日期字符串的输入,我会建议使用不同的分隔符。使用“:”会导致分隔符也作为字符串中的有效非分隔符存在的问题。上面的代码片段可以正常工作,假设输入不受您/您的方法控制。
答案 3 :(得分:0)
使用replaceFirst
方法有点复杂。
ArrayList<String> splitDate = new ArrayList<String>();
for (String dateItem : date) {
String output = dateItem.replaceFirst("^(\\w{3}\\s\\w{3}\\s\\d{2}:\\d{2}):\\d{2}\\s\\w+\\s\\d+$", "$1");
splitDate.add(output);
Log.i("info", output);
}
答案 4 :(得分:0)
您始终可以使用java.util.StringTokenizer
课程。
考虑date
是包含ArrayList
格式的String
日期,以下代码行将以所需格式添加日期。
StringTokenizer dateString = new StringTokenizer(date.get(i), ":");
splitDate.add(dateString.nextToken() + ":" + dateString.nextToken());
够简单!