我有这个代码

if(beforeModify.get(i).equals("a")|beforeModify.get(i).equals("e")|beforeModify.get(i).equals("i")|
                    beforeModify.get(i).equals("o")|beforeModify.get(i).equals("u")|beforeModify.get(i).equals("á")|
                    beforeModify.get(i).equals("é")|beforeModify.get(i).equals("í")|beforeModify.get(i).equals("ě")|
                    beforeModify.get(i).equals("y")|beforeModify.get(i).equals("ý")|beforeModify.get(i).equals("ů")|
                    beforeModify.get(i).equals("ú"))


我可以做得更好吗?

最佳答案

您可以将其编写为List.contains调用:

if (Arrays.asList("a", "e", etc).contains(beforeModify.get(i))


但是您也可以预先构建一个Set并使用它:

// Build once, keep the set to reuse.
Set<String> set = new HashSet<>(Arrays.asList("a", "e", etc));

if (set.contains(beforeModify.get(i))


HashSet的优点是元素数量为O(1)List将是O(n)



另外:您正在使用|,而不是||。前者将评估所有操作数,后者将在其中一个被匹配时立即停止。您不需要对它们全部进行评估,因为文字参数上的String.equals没有副作用。使用||

07-26 08:12