2017-06-08 15 views
0

スキャナがテキストファイル内のすべての単語をスキャンして、それぞれを特定の配列に保存する場所でこのコードを作成します。しかし、スキャナがスキャンを開始するたびに、次の行に到達し、最初の単語で停止します。私はこれを正確に引き起こしているのか分かりません。私はカンマの間で単語を区切るデリミタを使用しています "、"。ここでスキャナは第1行目と第2行目の最初の入力のみをスキャンします

は、コードの一部です:

package ex13a; 
import java.util.Scanner; 
import java.io.*; 
/** 
* 
* @author Work 
*/ 
public class Ex13a { 
static Scanner scan = new Scanner(System.in); 
static int[] number = new int[100]; 
static String[] f_users = new String[100]; 
static String[] l_users = new String[100]; 
static String[] passwd = new String[100]; 
static int i = 0; 
static String fullName; 

/** 
* @param args the command line arguments 
* @throws java.io.IOException 
*/ 
public static void main(String[] args) throws IOException { 
String path = "C:\\Users\\Work\\Desktop\\users.txt"; 
File inFile = new File(path); 
Scanner inPut = new Scanner(inFile).useDelimiter(","); 
Scanner inPut2 = new Scanner(inFile); 
while(inPut.hasNext()){ 
    System.out.println(number[i] = inPut.nextInt()); 
    System.out.println(f_users[i] = inPut.next()); 
    System.out.println(l_users[i] = inPut.next()); 
    System.out.println(passwd[i] = inPut.next()); 

    i++; 

} 

それは私にそのエラーがスローされます:ラインで

1 
Ahmed 
Dhaif 
asdf56 
Exception in thread "main" java.util.InputMismatchException 
2 
at java.util.Scanner.throwFor(Scanner.java:864) 
at java.util.Scanner.next(Scanner.java:1485) 
at java.util.Scanner.nextInt(Scanner.java:2117) 
at java.util.Scanner.nextInt(Scanner.java:2076) 
at ex13a.Ex13a.main(Ex13a.java:32) 
C:\Users\Work\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53:  Java returned: 1 
BUILD FAILED (total time: 0 seconds) 
+0

'nextLine()'を使ってファイルを1行ずつ読み込み、 '.split("、 ")'を使ってその行を解析します。また、JavaScriptとJavaは全く別の2つの独立した言語であり、あなたの質問はNetbeansとは関係ありません。 javascriptタグとnetbeansタグを削除します。 –

+0

恐らく、テキストファイルの2行目の 'nextInt()'呼び出しから '2'という値が出力されたのですが、' nextInt() 'の呼び出しでは失敗してしまいました。しかし、 'nextInt()'によって返された値を出力した場合は、次の文になります。これは 'next()'の呼び出しであり、 'nextInt()'の呼び出しではありません。あなたはあなたが実行しているコードですか? – Andreas

+0

エラーメッセージを読むと、エラーメッセージが表示されます。人々が回答するのを助けるために、あなたが入力データを提供しても助けになります。 – Peter

答えて

1

グラブラインを、そしてその後、返された文字列を解析し、コンマの周りの行を分割します。

Scanner inPut = new Scanner(inFile); 
while(inPut.hasNextLine()){ 
    String [] data = inPut.nextLine().split(","); 
    System.out.println(Integer.parseInt(data[0])); 
    number[i] = Integer.parseInt(data[0]); //to add to your arrays 
    System.out.println(Integer.parseInt(data[1])); 
    System.out.println(Integer.parseInt(data[2])); 
    System.out.println(Integer.parseInt(data[3])); 
    i++; 
} 

アレイが正しいサイズで、文字列が実際には整数であることを確認する必要があります。あなたはそれをすることができるはずです。しかし、これはあなたを開始する必要があります。

データ構造に値を格納する場合、配列のような固定長のデータ構造ではなく、動的なものを使用します。

1

エラーメッセージをお読みください。例外はnextInt()メソッドで発生しました。 documentationから、nextInt()

InputMismatchException - if the next token does not match the Integer 
regular expression, or is out of range 

のためにあなたが読んでいるトークンは、あなたがそれだと思うものではありません。 nextInt()のコールを別のものに置き換えて、それが何であるかを確認し、そこから行くことができます。レコードの

、このコードは著しく「は、任意のトークンが存在する」ためのループチェックが

  1. を信頼し、それが 整数であると仮定されます。
  2. トークンが1つある場合は、各ループの繰り返しの後に3つ以上のトークンが存在すると仮定します。
  3. エントリ数のための保護はありませんが、あなたはそれが< = 100

になりますと仮定編集

私の推測では、行末にISN」についての何かがあるありますあなたがそれを読むときは整数のように見えますが、実際は^ r ###のようなものです。ここで "^ r"は制御コード、###は数字です。

hasNext()hasNextInt()に変更すると、1行の処理後に停止します。バイナリエディタでファイルを読んで、あなたが本当に読んでいるものを見てください。

+0

私はすでにそのコンテンツの知識と将来の変化の可能性があるので、それは信頼できるコードです。 nextIntを次のものに置き換えてintかどうかを調べました。驚いたことに、ファイル全体が表示されますが、このエラーメッセージが表示されます。スレッド "main"の例外、途中でjava.util.NoSuchElementException、その他のエラーが発生しました。 –

+0

次の予想される数値はintであった。 –

+0

@MJ - 入力データを見ることなく(とにかく、私が上でコメントしたように入力データは役に立ちました)、テストの結果は次の問題が何かを推測することができますが、ファイル境界条件。実際には、行末の問題のように思えます。印刷できないものや行頭の一部が空白として認識されていません。ファイルの最初の数行を文字単位で読み込み、文字コードを出力するか、バイナリエディタでファイルを編集して、行末の奇妙さを探してみてください。 – Peter

関連する問題