Float.parseFloat()
和
Integer.parseInt()
检查类型。
Integer.parseInt()
工作正常,但是
Float.parseFloat()
包括所有已检查的数字。如何避免这种情况?
问题是,在检查浮点类型时,它还考虑INT(输出)::
public class TypeCountString {
public static void countTypeInString(String string){
String[] value = string.split(" ");
float ifFloat;
int ifInt;
String ifString;
int counter = 0;
// count Floats
for (String i: value){
try{
ifFloat = Float.parseFloat(i);
counter++;
continue;
} catch (NumberFormatException e){
}
}
System.out.println("Float " + counter);
//count ints
counter = 0;
for (String i: value){
try{
ifInt = Integer.parseInt(i);
counter++;
continue;
} catch (NumberFormatException e){
}
}
System.out.println("Int " + counter);
//counts strings
String stringOfStrings = string.replaceAll("[0-9.]","");
stringOfStrings = stringOfStrings.replaceAll(" "," ");
String[] value2 = stringOfStrings.split(" ");
System.out.println("String " + value2.length);
}
public static void main(String[] args) {
String string = "Hello my 50 name 4.5 is James, I 20 years old and i have 5.7 coins";
System.out.println(string);
countTypeInString(string);
}
}
有些令牌(例如“ 50”)作为整数和浮动都可以放松。即使您的意图是将每种令牌视为一种或另一种类型(因此,将“ 50”视为整数,而不是浮点)。
确保
i
Float.parseFloat()
和
确认
i
包含小数点
Float.parseFloat(i);
if (i.contains(".")) {
counter++;
continue;
}
第二,由于您只需检查(并计数)每个令牌,所以您可以:
检查整数(浮动之前) - 如果它通过Integer.parseInt()
如果它不作为整数解析,请试图解析以float的代币 - 只是
Float.parseFloat()
而不寻找小数;如果起作用,请碰碰柜台,转到近token
String
首先将每个子字符串放在
float
String
。启动整数是至关重要的,因为十进制分离器永远不会出现在整数中,毫无疑问地对我们解析的内容,而有实数,分隔符可能会或可能不会出现。
try-catch
catch
的
NumberFormatException
块中。这是一个可能的实现:
public class Main {
public static void main(String[] args) {
countTypesInString();
}
public static void countTypesInString() {
String str = "Hello my 50 name 4.5 is James, I 20 years old and i have 5.7 coins";
String[] vetStr = str.split("\\s+");
List<Integer> listInt = new ArrayList<>();
List<Float> listFloat = new ArrayList<>();
List<String> listStr = new ArrayList<>();
for (String s : vetStr) {
try {
// attempt int parsing
listInt.add(Integer.parseInt(s));
} catch (NumberFormatException exInt) {
try {
// attempt float parsing
listFloat.add(Float.parseFloat(s));
} catch (NumberFormatException exFloat) {
// just treat it as a String
listStr.add(s);
}
}
}
System.out.println("Number of ints: " + listInt.size() + " => " + listInt);
System.out.println("Number of floats: " + listFloat.size() + " => " + listFloat);
System.out.println("Number of strings: " + listStr.size() + " => " + listStr);
}
}
Number of ints: 2 => [50, 20]
Number of floats: 2 => [4.5, 5.7]
Number of strings: 12 => [Hello, my, name, is, James,, I, years, old, and, i, have, coins]
作为旁注,您可能需要使用
double
而不是
float
表示实数,因为与后者相比,前者具有更高的精度。实际上,Java默认情况下将十进制文字视为
double
。