2016-02-28 71 views
2

我有我的代码在这里:替换文本文件中的Java一句话

public void Edit()throws IOException{ 
     FileWriter writeFile=new FileWriter("voters.txt", true); 
     BufferedWriter outFile=new BufferedWriter(writeFile); 
     File readFile=new File("voters.txt"); 
     BufferedReader read=new BufferedReader(new FileReader(readFile)); 

     vNumForEdit=JOptionPane.showInputDialog("Enter voters number: "); 
     String line=null; 
     while((line=read.readLine())!=null){ 
      String [] info=line.split("/"); 
      if(info[0].matches(vNumForEdit)){ 
       String [] forEditMenu={"Name", "Age", "Gender", "Date of Birth", "Place of Birth", "Address", "Civil Status", "Citizenship", "Profession/Occupation", "Father's Name", "Mother's Name"}; 
       forEdit=(String)JOptionPane.showInputDialog(null, line+"\n\nPlease select what you want to edit", "National Election 2765", 1, null, forEditMenu, forEditMenu[0]); 
       switch(forEdit){ 
       case "Name": 
        newName=JOptionPane.showInputDialog("Enter new name: "); 
        if(info[1].matches(oldName)){ 
         outFile.append(info[1]=newName); 
         outFile.close(); 
        } 
        read.close(); 

        break; 
       } 
      } 
     } 
    } 

文本文件看起来像这样

1/d/19/Male/e//s/Single/v/e/e/f 
2/c/98/Male//d/c/Single/r/w/q/d 

,你可以看到我发的信息/线阵列,它可以读取作为投票号码的索引0中的值。任务是用户将输入选民号码,然后如果发现,用户将再次输入他想要编辑的内容。我使用数组以及确定的姓名,年龄,性别等数组是这样的:

info[0] = voters number 
info[1]= name 
info[2] = age 
info[3] = date of birth 
info[4]= place of birth 
info[5] = status 
info[6] = citizenship 
info[7] = profession 
info[8] = father's name 
info[9] = mother's name 

,但我的代码总是错误java.lang.NullPointerException结束。我大部分的变量有全局声明

编辑:这里的错误/堆栈跟踪

Exception in thread "main" java.lang.NullPointerException 
    at java.util.regex.Pattern.<init>(Unknown Source) 
    at java.util.regex.Pattern.compile(Unknown Source) 
    at java.util.regex.Pattern.matches(Unknown Source) 
    at java.lang.String.matches(Unknown Source) 
    at lozada.My_Voting_System_Official.Edit(My_Voting_System_Official.java:135) 
    at lozada.My_Voting_System_Official.Menu(My_Voting_System_Official.java:43) 
    at lozada.My_Voting_System_Official.main(My_Voting_System_Official.java:15) 
+1

请包括堆栈跟踪。 – Veluria

+0

代码中的哪一行会得到NPE? – Sachin

+1

此外,如果检查其常规字符串是否使用“equals”或“equalsIgnoreCase”而不是“matches”。 – Sachin

回答

0

我想你没有申报的使用oldName变量 在此代码

if(info[1].matches(oldName)){ 
 
         outFile.append(info[1]=newName); 
 
         outFile.close(); 
 
        }

+0

vNumForEdit和oldName未声明。 –

+0

我的大部分变量都是全局声明的:) – bruh

+0

以及堆栈恍惚说不然。 “Unknown Source” –