1

ドキュメントを検索して数字を見つけて配列に入れるコードを書いています。ドキュメントの一部を次に示します。

 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;
}
}
}
4

2 に答える 2

0

あなたのremoveNextWord()方法は貪欲です。つまり、数字も削除しています。

実装では、最初に単語の前の文字ではないすべてを削除し、次に単語自体を削除し、最後に単語に続く文字ではないすべての文字を削除してから、ID 番号も削除します。

おそらく、この行のコメントを外して、名前isLetter()isToken().

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

編集:数値の条件チェックを修正してください。ch <= '1'間違っています。

于 2013-05-19T21:19:09.117 に答える
0

ch>=0 && ch<=9 をチェックすると、1 桁の数字のみが許可されます。正規表現を使用することをお勧めします

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

if(token.matches(regex))
// add the token to the array!
于 2013-06-29T07:41:32.110 に答える