读取包含括号的文件中的整数值

时间:2013-10-17 13:07:59

标签: java java.util.scanner

我想在包含如下字符串的文件中读取整数值:

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个(或更多)字符组成的整数值。

我该如何解决?

3 个答案:

答案 0 :(得分:2)

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

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

,其中

  • \\D - 匹配非数字
  • + - 贪婪量词以匹配所有可用的非数字字符

答案 1 :(得分:0)

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

答案 2 :(得分: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();
        }


    }

}