我想只提取每隔一行显示一个数字的号码。
Moapa, NV
89025 US
Palmer, MA
01069 US
Hill Air Force Base, UT
84056 US
Liberty, OH
45044 US
Mystic, IA
52574 US
Loveland, CO
80537 US
Boise, ID
83714 US
Croton, NY
10520 US
Bloomington, IL
61705 US
Hidalgo, TX US
Morrisville, PA
19067 US
presidio, TX
79845 US
DOUGLASSVILLE, PA
19518 US
Sutherlin, VA
24594 US
Brighton, CO
80601 US
Indianapolis, IN
46204 US
MARIETTA and ASHLAND, OH
44805 US
Sutherlin, VA
24594 US
Frostburg, MD
21532 US
Sutherlin, VA
24594 US
Gridiron, TX
77054 US
Nacogdoches, TX
75964 US
Sun Valley, CA
91352 US
Eagle Pass, TX
78852 US
我用过这个
int value=Integer.parseInt(str.replaceAll("[^0-9]", ""));
但是在打印完9个号码后出现错误" java.lang.NumberFormatException"
请帮我打印一个号码。
答案 0 :(得分:3)
不建议将美国邮政编码转换为整数值。虽然它们是由十进制数字组成的字符串,但它们应被视为字符串。
考虑:
Palmer, MA
01069 US
parseInt的整数值为1069,如果打印出来,则为4位,1069,美国邮件可能会感到困惑。
使用
String value = str.replaceAll("[^0-9]", "");
并测试它的长度。
答案 1 :(得分:2)
您将收到异常,因为在打印 9号之后,连续2行不会出现异常的数字。取决于行号模式,您应该检查有效行以打印
迭代每一行并匹配模式以检查其有效行
if (line.matches("^\\d+.*")) {
int value = Integer.parseInt(line.replaceAll("[^0-9]", ""));
/* Do whatever you like to do */
}
答案 2 :(得分:1)
如果您使用的是Java 8,则可以使用:
try (Stream<String> stream = Files.lines(Paths.get("fileName.txt"))) {
stream.filter(line -> line.matches("^\\d+.*"))//filter only the lines start with a number
.map(line -> Integer.parseInt(line.replaceAll("[^0-9]", "")))//replace all non digit and parse it to Integer
.forEach(System.out::println);//print the result
} catch (IOException e) {
e.printStackTrace();
}
就像你可以在整数列表中收集结果:
List<Integer> listNumbers = stream.filter(line -> line.matches("^\\d+.*"))
.map(line -> Integer.parseInt(line.replaceAll("[^0-9]", "")))
.collect(Collectors.toList());
注意:就像在answer中提及@laune一样,如果解析它,你将在美国邮政编码中丢失一些信息,而是使用这样的字符串:
List<String> listNumbers = stream.filter(line -> line.matches("^\\d{5}.*"))// Filter the codes start with 5 digits
.map(line -> line.replaceAll("[^0-9]", ""))
.collect(Collectors.toList());
答案 3 :(得分:0)
您在该行中缺少数据。
&#39; Hidalgo,TX US&#39;
答案 4 :(得分:0)
假设您将数据存储在文件中。
逐行阅读文件。
用“”字符拆分该行并获取您的电话号码。
如果该行有一个数字,它将解析它,否则它会抛出一个数字格式异常处理它。
对文件中的所有行重复此操作。
代码:
import java.io.IOException;
import java.util.Scanner;
import java.io.File;
public class PrintSecondLine {
public static void main() throws IOException{
File file = new File("/tmp/myFile.txt");
Scanner keyboard = new Scanner(file);
while(keyboard.hasNextLine()){
String line = keyboard.nextLine();
try{
int number = Integer.parseInt(line.split(" ")[0]);
System.out.println(number);
}
catch(NumberFormatException exception){
}
}
}
}
答案 5 :(得分:0)
如果您正在逐行读取包含文本的文件, 你必须在解析之前检查字符串是否为空。
str = str.replaceAll("[^0-9]", "");
if (!str.isEmpty()) {
System.out.println(value);
}