我有一个library(dplyr)
ans <- finaldf %>%
group_by(SeqDateTime = cut(SeqDateTime, breaks = "15 min")) %>%
summarize(broomsTot = sum(as.numeric(broomsTot), na.rm = TRUE))
head(ans)
Source: local data frame [6 x 2]
SeqDateTime broomsTot
(fctr) (dbl)
1 2015-01-01 02:00:00 0
2 2015-01-01 02:15:00 0
3 2015-01-01 02:30:00 0
4 2015-01-01 02:45:00 0
5 2015-01-01 03:00:00 0
6 2015-01-01 03:15:00 0
我会迭代以找到给定String的正确索引。基本上,给定一个String,程序应该搜索列表并找到整个单词匹配的索引。例如:
ArrayList<String>
因此,如果我给出字符串ArrayList<String> foo = new ArrayList<String>();
foo.add("AAAB_11232016.txt");
foo.add("BBB_12252016.txt");
foo.add("AAA_09212017.txt");
,我应该回到索引AAA
(最后一个)。所以我不能使用2
方法,因为这会给我回索引contains()
。
我尝试使用此代码:
0
不幸的是,这段代码永远不会到达循环内的String str = "AAA";
String pattern = "\\b" + str + "\\b";
Pattern p = Pattern.compile(pattern);
for(int i = 0; i < foo.size(); i++) {
// Check each entry of list to find the correct value
Matcher match = p.matcher(foo.get(i));
if(match.find() == true) {
return i;
}
}
语句。我不确定我做错了什么。
注意:如果我搜索if
,全名AAA_0921
或字符串中任何独特的部分,这也应该有效。
答案 0 :(得分:6)
由于单词char和下划线之间的单词边界不匹配,您需要
String pattern = "(?<=_|\\b)" + str + "(?=_|\\b)";
此处,(?<=_|\b)
正向后视需要在str
之前显示单词边界或下划线,而(?=_|\b)
正向前瞻需要下划线或单词边界才会出现在str
。
如果你的单词里面有特殊的字符,你可能想要使用更直接的单词边界:
"(?<![^\\W_])" + Pattern.quote(str) + "(?![^\\W_])"
这里,如果除了下划线之外有一个单词字符,则负向后看(?<![^\\W_])
会使匹配失败([^...]
是一个否定字符类,它匹配除了字符,范围等之外的任何字符。因此,在此类中,它匹配除非单词char \W
和_
之外的所有字符,如果存在单词char,则(?![^\W_])
否定前瞻将使匹配失败str
之后的下划线。
请注意,第二个示例包含引用的搜索字符串,因此即使AA.A_str.txt
也可以与AA.A
很好地匹配。