Kot*_*tha -1 java java-8 java-stream
输入= M+a?i*n S=t
期望值= M a i n s t
每个角色从比较输入与字符的下面的列表,如果发现有空格替换它和输出中应expectedValue。
假设
String input;
List<Character> forbidden;
Run Code Online (Sandbox Code Playgroud)
你可以使用
String result = input.replaceAll(
forbidden.stream()
.map(String::valueOf).map??(Pattern::quote)
.collect(Collectors.joining("|")),
" ");
Run Code Online (Sandbox Code Playgroud)
它将每个禁止的字符转换Character
为String
using String.valueOf(…)
,然后将使用Pattern.quote(…)
将它们转换为带引号的模式字符串,以确保不将字符解释为特殊的regex构造,然后将所有字符都用|
regex模式中的“或”进行连接。然后,String.replaceAll(regex, replacement)
完成实际工作。
没有正则表达式的替代方法(“纯流操作”)是
String result = input.chars()
.map(c -> forbidden.contains((char)c)? ' ': c)
.collect(StringBuilder::new, (sb, c) -> sb.append((char)c), StringBuilder::append)
.toString();
Run Code Online (Sandbox Code Playgroud)
这将直接遍历所有字符,检查它们是否包含在forbidden
集合中,如果存在则将其替换为空格,最后将映射的字符收集到new String
。forbidden
更改为a Set<Character>
而不是List<Character>
由于contains
对每个字符调用的时间复杂性会更有效。
归档时间: |
|
查看次数: |
4053 次 |
最近记录: |