0

我想在一个文件中读取整数值,该文件包含这样的字符串:

1 (23 4 5)

这是我的Java代码

import java.io.File;
import java.io.FileNotFoundException;
import java.util.InputMismatchException;
import java.util.Scanner;


public class EssaiLecture {

    public static void main (String[] args){
        try {

            File file = new File("try.txt");


                Scanner sc = new Scanner(file).useDelimiter("");

           while(sc.hasNext()){

               try{

                  System.out.println(sc.nextInt());

               }
               catch (InputMismatchException in) {

                  sc.next();

               }

           }  

              sc.close();
            }
              catch (FileNotFoundException e) {
              e.printStackTrace();
            }


    }

}

输出是

1
2
3
4
5

问题是:我无法读取由 2 个(或更多)字符组成的整数值。

我该如何解决?

4

3 回答 3

2

从输出中已经看到,使用空String作为分隔符会导致输入被拆分为单个字符 - 您可以使用非数字模式表达式

Scanner sc = new Scanner(file).useDelimiter("\\D+");

在哪里

  • \\D- 匹配一个非数字
  • +- 贪心量词匹配所有可用的非数字字符
于 2013-10-17T13:32:00.373 回答
0

数字是否总是用空格分隔,您可以在括号和数字之间添加空格吗?如果是这样,请将您的分隔符更改为“”,并且应该这样做,同时也避免使用正则表达式。

于 2013-10-17T13:19:23.340 回答
0

关键是使用正则表达式在非数字之间进行拆分。

package controllers;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.InputMismatchException;
import java.util.Scanner;
import java.util.regex.Pattern;


public class EssaiLecture {

    public static void main (String[] args){
        try {

            File file = new File("try.txt");

            Scanner sc = new Scanner(file).useDelimiter("[^0-9]");

            while(sc.hasNext()){

                try{
                    String string = sc.next();
                    int a = Integer.parseInt(string);
                    System.out.println(a);

                }
                catch (InputMismatchException in) {
                    sc.next();
                }
                catch(NumberFormatException e){

                }

            }

            sc.close();
        }
        catch (FileNotFoundException e) {
            e.printStackTrace();
        }


    }

}
于 2013-10-17T13:32:39.137 回答