拆分数组列表中的字符串Java

时间:2016-09-17 17:32:46

标签: java android arrays split

我有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日星期三,没有例外。

我的方法是否正确?

5 个答案:

答案 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;不存在。例如:

  • 8月10日星期三:15:17 AST 2016将于8月10日星期三
  • 8月10日星期三10:25 :17 AST 2016将于8月10日星期五开始
  • Wed Aug 10:25:25 AST 2016将于8月10日星期五10:25:25 AST 2016

如果您知道字符串的格式,那么我只是这样做:

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

够简单!