2013-05-19 59 views
1

我正在编写代码来搜索文档并查找数字并将它们放入数组中。这是一个文件:扫描仪跳过数字Java

username Sam movies id 1 Citizen Kane id 2 Vertigo id 3 Rules of the Game... 

当我运行该程序nextword跳过id后的数字,并使用下一个单词。我需要它读取数字,以便将数字放入数组中。

请帮忙。谢谢!

package ArrayInversions; 
import java.io.*; 
public class Main{ 
public static void main (String[]args) 
    throws FileNotFoundException{ 
    TextReader read = new TextReader("/Users/name/Desktop/movie-data.json"); 

    int[] ArraySam = new int[1000]; 
    int[] ArrayTerry = new int [1000]; 
    int[] ArrayDana = new int [1000]; 
    int temp; 
    int i=0; 

    String nextword; 
    String name=null; 
    String id="id"; 

    nextword=read.GetWord(); 
    while (nextword!=null){ 
     if (nextword.compareTo("username")==0){ 
      nextword=read.GetWord(); 
      name=nextword; 
      System.out.println("name: "+name); 
      nextword=read.GetWord(); 
      i=0; 
     } 
     System.out.println("* "+nextword+"="+id); 

     if(nextword.compareTo(id)==0){ 
      nextword=read.GetWord(); 
      System.out.println(nextword); 
      temp=Integer.valueOf(nextword); 

      if (name.compareTo("Sam")==0){ 
       System.out.println("Sam"); 
       ArraySam[i]=temp; 
       i++; 
      } 
      else if (name.compareTo("Terry")==0){ 
       System.out.println("Terry"); 
       ArrayTerry[i]=temp; 
       i++; 
      } 
      else{ 
       System.out.println("Dana"); 
       ArrayDana[i]=temp; 
       i++; 
      } 
     } 
     nextword=read.GetWord(); 
      } 
     } 
     } 

package ArrayInversions; 
import java.util.*; 
import java.io.*; 

public class TextReader { 

private Scanner read; 
private String currline; 

public TextReader(String filename){ 
try{ 
    currline = ""; 
    read = new Scanner(new File(filename)); 
} 
catch (Exception ex){    
    System.out.println("File does not exist error: "+ex.toString()); 
} 
} 
private static boolean isLetter(char ch) { 
    return ((ch >= 'A')&&(ch <= 'Z') || 
      (ch >= 'a')&&(ch <= 'z') || 
       // (ch <= '1')&&(ch <= '9') || //allows numbers? 
      (ch == '-') || (ch == '\'') 
      ); } 
private String removeNextWord(String s) { 
    //Returns the string with the first 'word' removed 
    //First, pull all non-letters off front 
    while ((s.length()>0) && (isLetter(s.charAt(0))== false)) 
     s = s.substring(1); 
    //Now, pull all letters off front 
    while ((s.length()>0) && (isLetter(s.charAt(0))== true)) 
     s = s.substring(1); 
    //Finally remove all non-letters off front 
    while ((s.length()>0) && (isLetter(s.charAt(0))== false)) 
     s = s.substring(1); 

    return s;        //Return the resulting string 
} 
private String getNextWord(String s) { 
    //Returns first 'word' of the string 
    //First, pull all non-letters off front 
    String word=""; 
    while ((s.length()>0) && (isLetter(s.charAt(0))== false)) 
     s = s.substring(1); 
    //Now, keep all letters as we pull them off the front 
    while ((s.length()>0) && (isLetter(s.charAt(0))== true)) 
    { word = word + s.charAt(0); //build up the word 
     s = s.substring(1);   //remove letters from string input 
    } 
    return word;     //Return the resulting word string 
} 

public String GetWord(){ 
// throws FileNotFoundException //required throw line 
{ String nextword; 

    while ((currline != null)&&(currline.length()== 0)){ 
     if (read.hasNext()) 
      currline = read.nextLine().trim(); 
     else 
      currline = null; 
    } 
    if (currline != null) 
    { nextword = getNextWord(currline); //get word from front of line 
     currline = removeNextWord(currline).trim(); //update the line w/o word 
    } 
    else 
    { 
     nextword = null; 
    } 
    return nextword; 
} 
} 
} 

回答

0

removeNextWord()方法是贪婪的,即它取出数为好。

在您的实现,首先拆除的一切,这不是单词前的一封信,那是不信,然后删除ID号以及在字后面的词本身,最后所有的字符。

也许,您应该取消注释此行并将isLetter()重命名为isToken()

(ch >= '0') && (ch <= '9') || // allow numbers 

编辑:请解决您的数字条件检查。 ch <= '1'不正确。

+0

当我取消注释行(ch <='1')&&(ch <='9')|| //允许数字不会给我一个字。我得到所有的话。 – user2399625

+0

提示:使用'Character.isLetterOrDigit(ch)'实现新的'isToken()'方法。 –

+0

当我取消注释该行在我的主要nextword成为:“用户名山姆电影ID 1公民凯恩ID”。 – user2399625

0

当您检查ch> = 0时& & ch < = 9它只会允许单个数字的数字。使用正则表达式是一个好主意

String regex="^[0-9]$"; 

if(token.matches(regex)) 
// add the token to the array!