如果条件太多Java

0 java if-statement conditional-statements

我有这个代码

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("ú"))
Run Code Online (Sandbox Code Playgroud)

我可以做得更好吗?

And*_*ner 11

你可以把它写成一个List.contains电话:

if (Arrays.asList("a", "e", etc).contains(beforeModify.get(i))
Run Code Online (Sandbox Code Playgroud)

但你也可以预先构建一个Set,然后使用:

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

if (set.contains(beforeModify.get(i)) 
Run Code Online (Sandbox Code Playgroud)

HashSet具有作为优点O(1)中的元素的数目; 一个ListO(n).


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