0

私は Java が初めてで、Java の Scanner クラスに関するヘルプを探しています。以下が問題です。複数の行を含むテキスト ファイルがあり、各行には複数の数字のペアがあります。各数字のペアは ( digit,digit ) として表されます。たとえば、3,3 6,4 7,9 です。これらの複数の数字のペアはすべて、空白で区切られています。以下は、テキスト ファイルの例です。

1 2,3 3,2 4,5

2 1,3 4,2 6,13

3 1,2 4,2 5,5

私が欲しいのは、各桁を個別に取得できることです。そのため、リンクリストの配列を作成できます。以下は、私がこれまでに達成したものです。

Scanner sc = new Scanner(new File("a.txt"));
    Scanner lineSc;
    String line;
    Integer vertix = 0;
    Integer length = 0;
    sc.useDelimiter("\\n"); // For line feeds

    while (sc.hasNextLine()) {
        line = sc.nextLine();
        lineSc = new Scanner(line);

        lineSc.useDelimiter("\\s"); // For Whitespace
        // What should i do here. How should i scan through considering the whitespace and comma
        }

ありがとう

4

4 に答える 4

1

正規表現の使用を検討してください。期待どおりでないデータを簡単に識別して処理できます。

CharSequence inputStr = "2 1,3 4,2 6,13";    
String patternStr = "(\\d)\\s+(\\d),";    
// Compile and use regular expression
Pattern pattern = Pattern.compile(patternStr);
Matcher matcher = pattern.matcher(inputStr);

while (matcher.find()) {
    // Get all groups for this match
    for (int i=0; i<=matcher.groupCount(); i++) {
        String groupStr = matcher.group(i);
    }
}

グループ 1 とグループ 2 は、それぞれ各ペアの 1 桁目と 2 桁目に対応します。

于 2012-07-22T12:16:37.920 に答える
0

1.nextLine() Scanner のメソッドを使用して、ファイルからテキストの各行全体を取得します。

2.次にBreakIterator、静的メソッドgetCharacterInstance()でクラスを使用して、個々の文字を取得します。コンマ、スペースなどは自動的に処理されます。

3. BreakIteratorまた、文や単語などを区切るための柔軟な方法が多数あります。

詳細については、これを参照してください。

http://docs.oracle.com/javase/6/docs/api/java/text/BreakIterator.html

于 2012-07-22T12:18:42.540 に答える
0

より単純な分割(正規表現)を使用します:

 while (sc.hasNextLine()) {
      final String[] line = sc.nextLine().split(" |,");
      // What should i do here. How should i scan through considering the whitespace and comma
      for(int num : line) { 
            // Do your job
      }        
 }
于 2012-07-23T06:36:45.520 に答える
0

StringTokenizer クラスを使用します。http://docs.oracle.com/javase/1.4.2/docs/api/java/util/StringTokenizer.html

//this is in the while loop
//read each line
String line=sc.nextLine();

//create StringTokenizer, parsing with space and comma
StringTokenizer st1 = new StringTokenizer(line," ,");

次に、行内のすべての数字が必要な場合は、このように nextToken() を呼び出すと、各数字が文字列として読み取られます

while(st1.hasMoreTokens())
{
    String temp=st1.nextToken();

    //now if you want it as an integer
    int digit=Integer.parseInt(temp);

    //now you have the digit! insert it into the linkedlist or wherever you want
}

お役に立てれば!

于 2012-07-22T17:15:26.757 に答える