Java 对字符串进行流式处理和筛选以获取char[]数组
我正试图使用下面这样的方法,通过字母数字字符流式传输和过滤给定的字符串Java 对字符串进行流式处理和筛选以获取char[]数组,java,Java,我正试图使用下面这样的方法,通过字母数字字符流式传输和过滤给定的字符串 List<String> alphanumeric = Arrays.asList("012345689abcdefhijklmnopqrstuvwxyz".split("")); char[] ssplit = Arrays.asList(s.toLowerCase().split("")) .stream() .filter(alphanum
List<String> alphanumeric = Arrays.asList("012345689abcdefhijklmnopqrstuvwxyz".split(""));
char[] ssplit = Arrays.asList(s.toLowerCase().split(""))
.stream()
.filter(alphanumeric::contains)
.map(i -> i.charAt(0))
.toArray(new char[0]);
List alphanumeric=Arrays.asList(“012345689abcdefhijklmnopqrstuvwxyz”.split(“”));
char[]ssplit=Arrays.asList(s.toLowerCase().split(“”)
.stream()
.filter(字母数字::包含)
.map(i->i.charAt(0))
.toArray(新字符[0]);
但我得到的错误如下:
error: method toArray in interface Stream<T> cannot be applied to given types;
.toArray(new char[0]);
^
required: IntFunction<A[]>
found: char[]
reason: cannot infer type-variable(s) A
错误:接口流中的toArray方法无法应用于给定类型;
.toArray(新字符[0]);
^
必需:IntFunction
找到:char[]
原因:无法推断类型变量A
我做错了什么?这个错误消息对我来说毫无意义我不知道你为什么要使用streams 请尝试以下操作:
String notLowerAlphaNum = "[^a-z0-9]";
char[] ssplit = s.toLowerCase().replaceAll(notLowerAlphaNum, "").toCharArray();
在您的情况下,正则表达式可能是正确的解决方案,或者将数组更改为
字符[]
的类型。但是,如果需要字符数组,可以执行以下操作:
char[] ssplit = Arrays.asList(s.toLowerCase().split(""))
.stream()
.filter(alphanumeric::contains)
.collect(Collectors.joining())
.toCharArray();
您不能执行
.toArray(新字符[0])代码>?这就是我所困惑的你有一条流。因此,它需要一个int函数,即一个以int为参数的函数,该函数创建一个java.lang.Character数组。相反,您正在传递一个char[]。您需要传递的是字符[]:::new
。但这将允许您创建一个字符[],而不是一个字符[]。事实上,我认为这不适用于char[]
;将返回类型更改为Character[]
和toArray
为。toArray(Character[]::new)
几乎是一样的。这很有意义,也很有效,似乎我得到了答案。编写s.chars()
以获得字符流更简单。