我有一个字符串数组,如:
String FileContent = "2017-04-03, 11:25, 2; 2017-04-02, 11:30, 8; 2017-04-03, 14:42, 9";
我要做的是提取符合特定条件的元素,假设我们需要选择给定日期的数组成员。
String[] SplittedContent = FileContent.split("\\s*;\\s*");
String date= "2017-04-03";
for (int i = 0; i < SplittedContent.length; i++)
if (SplittedContent[i].contains(date))
{
String [] MatchingContent = null;
MatchingContent[i]= SplittedContent[i];
}
它给了我一行错误:MatchingContent [i] = SplittedContent [i]; 有人可以帮忙吗?
答案 0 :(得分:0)
您正在尝试访问 null 的数组中的第i个元素。您需要初始化一个新列表,然后向其中添加项目:
String FileContent = "2017-04-03, 11:25, 2; 2017-04-02, 11:30, 8; 2017-04-03, 14:42, 9";
String date= "2017-04-03";
String[] SplittedContent = FileContent.split("\\s*;\\s*");
List<String> MatchingContent = new ArrayList<>();
for (int i = 0; i < SplittedContent.length; i++)
if (SplittedContent[i].contains(date))
{
MatchingContent.add(SplittedContent[i]);
}
System.out.println(MatchingContent);
// => [2017-04-03, 11:25, 2, 2017-04-03, 14:42, 9]
请参阅Java demo
请注意,检查值是否以开头
可能更合适if (SplittedContent[i].startsWith(date))
^^^^^^^^^^^^^^^^
收集匹配项的另一种方法是使用正则表达式直接匹配所需的子字符串:
String FileContent = "2017-04-03, 11:25, 2; 2017-04-02, 11:30, 8; 2017-04-03, 14:42, 9";
String date= "2017-04-03";
List<String> MatchingContent = new ArrayList<>();
Matcher m = Pattern.compile(date + "[^;]+").matcher(FileContent);
while(m.find()) {
MatchingContent.add(m.group());
}
System.out.println(MatchingContent);
// => [2017-04-03, 11:25, 2, 2017-04-03, 14:42, 9]
[^;]+
否定字符类([^...]
)匹配;
以外的任何1个字符。