我想在包含如下字符串的文件中读取整数值:
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个(或更多)字符组成的整数值。
我该如何解决?
答案 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();
}
}
}