HY,

我有以下代码:

 package regexsimple5;

    import java.util.Scanner;
    import java.util.ArrayList;
    import java.util.regex.*;
    import java.io.*;
    import java.util.regex.Pattern;

    public class RegexSimple5 {

        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {

            ArrayList <String> foundName = new ArrayList<String>();
            ArrayList <String> noDuplicatesName = new ArrayList<String>();

            try{
                Scanner myfis = new Scanner(new File("D:\\myfis5.txt"));

                while(myfis.hasNext())
                {
                    String delim = " ";
                    String line = myfis.nextLine();
                    String [] words = line.split(delim);

                    for( String s: words)
                    {
                        if(!s.isEmpty()&&s!=null)
                        {
                                Pattern search = Pattern.compile("[A-Z][a-z]*");
                                Matcher match = search.matcher(s);
                                if(match.find())
                                {
                                    foundName.add(s);
                                }
                        }
                    }






                }

                if(!foundName.isEmpty())
                {
                    for(String s: foundName)
                    {
                        System.out.println(s);
                        int n = foundName.size();
                        System.out.println(foundName.get(0));
                    }
                   int n = foundName.size();
                    for(int i=0; i<n; i++)
                    {
                        if(foundName.get(i).equals(foundName.get(i+1)))
                        {
                            noDuplicatesName.add(foundName.get(i));
                        }
                    }
                    System.out.println(n);
                }

                if(!noDuplicatesName.isEmpty())
                {
                    for(String s: noDuplicatesName)
                    {
                        System.out.print("***********");
                        System.out.print(s);
                    }
                }
            }
            catch (Exception ex)
            {
                System.out.println(ex);
            }

        }

    }


我希望借此显示名字和姓氏相同的人。

但是我得到了错误:


  java.lang.IndexOutOfBoundsException:


而不显示重复名称和姓氏的arraylist。

真诚的

最佳答案

问题线很可能是这样的:

if(foundName.get(i).equals(foundName.get(i+1)))


当位于列表末尾时,在访问第OutOfBoundsException个元素时将导致(i+1)

难以理解整个代码,但是您可以通过运行循环直到n-1来解决它,即:

for(int i=0; i<n-1; i++)

关于java - 尝试检测具有相同名字和姓氏的人时,我的ArrayList有什么问题。我正在使用正则表达式模式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23720546/

10-14 08:57