好的,正如我所承诺的那样快,我们走了:
我得到的代码片段只是用in
标记字符串in.split("");
,所以我分别得到所有字符,然后删除那些我不想要的字符,目前它看起来像这样: / p>
List<String> op=new ArrayList<String>(Arrays.asList(in.split("")));
op.removeAll(removable);
operators=op.toArray(new String[op.size()]);
其中op
是我处理删除的临时变量。有没有办法把它放在一行?如果有的话(请告诉我如何,我想知道一段时间,我认为没有因为removeAll()
返回布尔值) - 它应该完成还是应该保持这种方式以使其更容易阅读?
答案 0 :(得分:1)
你不需要Java 8:
String result = in.replaceAll(removable, "");
(我假设removable
是一个字符串。)
这可以通过将每个字符串removable
替换为空字符串来实现,基本上将其删除。
注意:强>
如果removable
包含(a)元字符,则应在其前面加上“\\”。 Peter Lawrey有这样一个好主意:removable = "[" + removable + "]";
对大多数元字符都有效。
如果您希望最终结果为List<String>
,则最后可以添加.split("");
:
列出结果= in.replaceAll(可移除,“”)。split(“”);
修改强>
正如Peter Lawrey很早就指出的那样,removable
不是一个字符串。如果你以某种方式无法将removable
更改为String(我认为会更容易),您仍然可以使用它将其转换为字符串:
StringBuilder sb = new StringBuilder();
sb.append("[");
for (String s : removable) {
sb.append(s);
}
sb.append("]");
String removableString = sb.toString();
(正则表达式需要括号([]),它们基本上是指“匹配我们之间的任何字符”。)
您使用removable
从单字符串字符串列表中删除项目,因此我假设removable
的所有项目也是单字符串字符串。如果不是这样,那么您将for循环内的行更改为sb.append("(").append(s).append(")");
。
使用字符串,您最终可以:
in.removeAll(removable, "").split("");
答案 1 :(得分:0)
如果你想删除字母,正则表达式将是一个更好的选择。 String是一个字符数组,您不需要使用List来处理它。
String removable = "[a-zA-Z0-9]";
String operators = in.replaceAll(removable, "");
这为您提供了一个不可移动字符的字符串。
如果可移动是一个集合,你可以将它变回一个带有的字符串。
String regex = "["+(removable.stream().collect(Collectors.joining()))+"]";
String operators = in.replaceAll(regex, "");
您可以内联regex
使其成为单行。
如果你想删除单词,你需要Java 8流来将它变成一个单行(除非你编写一个方法来执行此操作,你可以在一行中调用)
List<String> operators = Stream.of(in.split(" "))
.filter(s -> !removable.contains(s))
.collect(Collectors.toList());
但是,为了使其可读,您仍然最终使用三个换行符。 ;)
答案 2 :(得分:0)
removable
创建for
以通过ascii代码添加我想要处理的所有字符,但正如所指出的那样,小正则表达式会好上千倍。首先,我只想删除数字,但如果需要,我会在以后继续清理整个输入。
String[] operators=in.replaceAll("[0-9]", "").split("");
这样,因为我需要它作为String数组,但当然它也可以作为`List&#39;如果我想(明天再试):
List<String> op=new ArrayList<String>(Arrays.asList(in.replaceAll("[0-9]", "").split("")));
它是一个班轮。但是,我认为除了作者之外,任何人都不容易阅读。