如何区分查找小数的差异,但如果是一个句点,则同时忽略它?
例如,假设扫描程序
String s = "2015. 3.50 please";
当我使用函数scanner.hasNextFloat()
时,如何忽略嗨。?
我只扫描1行。我需要确定一个单词是字符串,整数还是浮点数。我的最终结果应该是这样的:
This is a String: 2015.
This is a float: 3.50
This is a String: please
但在我使用scanner.hasNextFloat();
的条件下,它将 2015。标识为浮动。
答案 0 :(得分:1)
在Java中,您可以使用正则表达式。一个或多个数字,后跟一个文字点,然后是两个数字。像
这样的东西String s = "Hi. 3.50 please";
Pattern p = Pattern.compile(".*(\\d+\\.\\d{2}).*");
Matcher m = p.matcher(s);
Float amt = null;
if (m.matches()) {
amt = Float.parseFloat(m.group(1));
}
System.out.printf("Ammount: %.2f%n", amt);
输出
Ammount: 3.50
答案 1 :(得分:0)
我假设你的意思是java,因为javascript没有扫描仪。
String s = "Hi. 3.50 please";
Scanner scanner = new Scanner(s);
while (scanner.hasNext()){
if (scanner.hasNextInt()){
System.out.println("This is an int: " + scanner.next());
} else if (scanner.hasNextFloat()){
System.out.println("This is a float: " + scanner.next());
} else {
System.out.println("This is a String: " + scanner.next());
}
}
输出:
This is a String: Hi.
This is a float: 3.50
This is a String: please
那么,问题是什么?
答案 2 :(得分:0)
您可以使用正则表达式匹配数字
String[] str = { " Hi, My age is 12", "I have 30$", "Eclipse version 4.2" };
Pattern pattern = Pattern.compile(".*\\s+([0-9.]+).*");
for (String string : str) {
Matcher m = pattern.matcher(string);
System.out.println("Count " + m.groupCount());
while (m.find()) {
System.out.print(m.group(1) + " ");
}
System.out.println();
}
输出:
Count 1
12
Count 1
30
Count 1
4.2
如果数字可以e
或E
,则在模式字符串中添加[0-9.eE]