我有一个逗号分隔值的字符串,我从数据库获取直接。现在我想将整个字符串传递给另一个查询,但所需的数据类型很长,我想使用in子句来完成这个。
str1 = [123,456,789];
有没有直接的方法来代替循环。
答案 0 :(得分:5)
您可以使用Java 8的Lambda函数实现此目的,而无需循环
String string = "1, 2, 3, 4";
List<Long> list = Arrays.asList(string.split(",")).stream().map(s -> Long.parseLong(s.trim())).collect(Collectors.toList());
答案 1 :(得分:4)
使用guava:
List<Long> longs = Lists.newArrayList(Iterables.transform(Splitter.on(',').split("1,2,3"), new Function<String, Long>() {
public Long apply(final String in) {
return in == null ? null : Longs.tryParse(in);
}
}));
编辑:
输入List<String>
(stringList
):
List<Long> longs = Lists.newArrayList(Lists.transform(stringList, new Function<String, Long>() {
public Long apply(final String in) {
return in == null ? null : Longs.tryParse(in);
}
}));
答案 2 :(得分:2)
我怀疑你可以在没有循环的情况下做到这一点。以下是一个示例解决方法:
String str = "[123,456,789]";
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher(str);
List<Long> list = new ArrayList<Long>();
while (matcher.find()) {
System.out.println(matcher.group());
list.add(Long.parseLong(matcher.group())); // Add the value to the list
}
System.out.println(list);
答案 3 :(得分:2)
使用StringTokenizer并使用while循环将拆分标记添加到列表中。
StringTokenizer st = new StringTokenizer("1,2,3", ",");
List<Long> list = new ArrayList<Long>();
while (st.hasMoreTokens())
{
list.add(Long.valueOf(st.nextToken()));
}
答案 4 :(得分:0)
您可以尝试下面的代码来从字符串中获取长值
如果str1 =“123,456,789”
Long x=Long.parseLong(str1.replace(",",""));
和
如果str1 =“[123,456,789]”
Long x=Long.parseLong(str1.replace(",|\\[|\\]",""));
答案 5 :(得分:0)
使用String.replace 假设str1包含“[123,123,123]”
str1 = str1.replace(",|\\[|\\]",""); //should replace commas and brackets with nothing;
那么你应该可以做到
Long myLong = Long.parseLong(str1);