Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Float/Int/Double的空间替换_Java_Floating Point - Fatal编程技术网

Java Float/Int/Double的空间替换

Java Float/Int/Double的空间替换,java,floating-point,Java,Floating Point,今天早上我正在做一个课堂作业,我想尝试解决一个我在所有队友项目中发现的问题;int/float/double中的空格会导致Java崩溃 为了解决这个问题,我有一个非常疯狂的想法,但在某些情况下确实有效。然而问题是,这并不总是有效的,我不明白为什么。以下是我的“主要”方法: import java.util.Scanner//扫描器类需要 公共类Test2 { 公共静态void main(字符串[]args) { BugChecking bc=新的BugChecking(); 第i串; 双i2=0

今天早上我正在做一个课堂作业,我想尝试解决一个我在所有队友项目中发现的问题;int/float/double中的空格会导致Java崩溃

为了解决这个问题,我有一个非常疯狂的想法,但在某些情况下确实有效。然而问题是,这并不总是有效的,我不明白为什么。以下是我的“主要”方法:

import java.util.Scanner//扫描器类需要
公共类Test2
{
公共静态void main(字符串[]args)
{
BugChecking bc=新的BugChecking();
第i串;
双i2=0;
扫描仪输入=新扫描仪(系统输入);
System.out.println(“请输入一个正整数”);

while(i2如果您想清除
字符串之间的所有空白,请使用或:

更新:

查看代码片段时,问题可能是您直接将其作为float/int/double读取(因此输入空格会停止
nextFloat()
),而不是使用
nextLine()
将输入作为
字符串读取,删除空格,然后尝试将其转换为适当的格式

这对我来说似乎很好:

public static void main(String[] args) {

    //bugChecking bc = new bugChecking();
    float i = 0.0f;
    String tmp = "";

    Scanner in = new Scanner(System.in);

    System.out.println("Please enter a positive integer");

    while (true) {

        tmp = in.nextLine();//read line
        tmp = tmp.replaceAll("\\s+", "");//get rid of spaces

        if (tmp.isEmpty()) {//wrong input
            System.err.println("Please enter a number greater than 0.");
        } else {//correct input

            try{//attempt to convert sring to float
            i = new Float(tmp);
            }catch(NumberFormatException nfe) {    
                System.err.println(nfe.getMessage());
            }

            System.out.println(i);
            break;//got correct input halt loop
        }

    }
    in.close();
}
编辑:


作为旁注,请以大写字母开头所有类名,即
bugChecking
类应为
bugChecking
这同样适用于
test2
类,如果您希望清除
字符串之间的所有空格,则应为
test2
,使用或:

更新:

查看代码片段时,问题可能是您直接将其作为float/int/double读取(因此输入空格会停止
nextFloat()
),而不是使用
nextLine()
将输入作为
字符串读取,删除空格,然后尝试将其转换为适当的格式

这对我来说似乎很好:

public static void main(String[] args) {

    //bugChecking bc = new bugChecking();
    float i = 0.0f;
    String tmp = "";

    Scanner in = new Scanner(System.in);

    System.out.println("Please enter a positive integer");

    while (true) {

        tmp = in.nextLine();//read line
        tmp = tmp.replaceAll("\\s+", "");//get rid of spaces

        if (tmp.isEmpty()) {//wrong input
            System.err.println("Please enter a number greater than 0.");
        } else {//correct input

            try{//attempt to convert sring to float
            i = new Float(tmp);
            }catch(NumberFormatException nfe) {    
                System.err.println(nfe.getMessage());
            }

            System.out.println(i);
            break;//got correct input halt loop
        }

    }
    in.close();
}
编辑:


作为旁注,请以大写字母开头所有类名,即
bugChecking
类应该是
bugChecking
这同样适用于
test2
类它应该是
test2

String
对象上有允许您执行此类操作的方法。您特别想要的是。这基本上就是你想为你做的

String input = " 2.03 445 ";
input = input.replace(" ", ""); // "2.03445"
您还可以使用正则表达式来替换不仅仅是空格的内容。例如,要除去所有不是数字或句点的内容:

String input = "123,232 . 03 445 ";
input = input.replaceAll("[^\\d.]", ""); // "123232.03445"
这将替换任何非数字、非句点字符,以便在输入中只剩下这些字符。请参阅的javadocs以了解有关正则表达式的一些信息,或搜索在线提供的众多教程之一

编辑:另一条注释将删除字符串开头和结尾的所有空白,以将
“2.0332”
转换为
“2.0332”

编辑2:通过您的更新,我现在看到了问题。
Scanner.nextFloat
是空间中出现的问题。如果您将代码更改为使用
Scanner.nextLine
,如下所示:

while (i <= 0) {
    String input = in.nextLine();
    input = input.replaceAll("[^\\d.]", "");
    float i = Float.parseFloat(input);

    if (i <= 0.0f) {
        System.out.println("Please enter a number greater than 0.");
    }

    System.out.println(i);        
}

while(i
String
对象上有允许您执行此类操作的方法。您特别想要的方法是。这基本上就是您想要为您执行的操作

String input = " 2.03 445 ";
input = input.replace(" ", ""); // "2.03445"
您还可以使用正则表达式来替换不仅仅是空格的内容。例如,要除去所有不是数字或句点的内容:

String input = "123,232 . 03 445 ";
input = input.replaceAll("[^\\d.]", ""); // "123232.03445"
这将替换任何非数字、非句点字符,以便在输入中只剩下这些字符。请参阅的javadocs以了解有关正则表达式的一些信息,或搜索在线提供的众多教程之一

编辑:另一条注释将删除字符串开头和结尾的所有空白,以将
“2.0332”
转换为
“2.0332”

编辑2:通过您的更新,我现在看到了问题。
Scanner.nextFloat
是空间中出现的问题。如果您将代码更改为使用
Scanner.nextLine
,如下所示:

while (i <= 0) {
    String input = in.nextLine();
    input = input.replaceAll("[^\\d.]", "");
    float i = Float.parseFloat(input);

    if (i <= 0.0f) {
        System.out.println("Please enter a number greater than 0.");
    }

    System.out.println(i);        
}

while(i我猜您使用的是main方法的第一个参数。如果main方法看起来像这样:

public static void main(String[] args){
  System.out.println(deleteSpaces(args[0]);
}
java MyNumberConverter 22.2 33
您的问题是,空格分隔了传递给主方法的参数。因此,像这样运行类:

public static void main(String[] args){
  System.out.println(deleteSpaces(args[0]);
}
java MyNumberConverter 22.2 33
第一个参数arg[0]是“22.2”,第二个参数arg[1]“33”


但是,正如其他人所建议的,无论如何,这是一种更好的方法。

我猜您使用的是main方法的第一个参数。如果main方法看起来像这样:

public static void main(String[] args){
  System.out.println(deleteSpaces(args[0]);
}
java MyNumberConverter 22.2 33
您的问题是,空格分隔了传递给主方法的参数。因此,像这样运行类:

public static void main(String[] args){
  System.out.println(deleteSpaces(args[0]);
}
java MyNumberConverter 22.2 33
第一个参数arg[0]是“22.2”,第二个参数arg[1]“33”


但正如其他人所建议的那样,这是一种更好的方法。

我采用了您的方法(有更简单的方法,但这并不重要),然后输入“2.03 445”它似乎起作用了。您是否检查了向方法传递的参数是否正确?添加日志记录可能是错误的。我不明白。要替换所有空格,只需使用
s.replace(“”,)
我猜您正在调用一个main(String[]args)方法?然后空格将分隔给程序的参数。因此,当您执行java MyNumberConverter 22.2 33时,您的主要方法称为获取参数“22.2”和“33”@mprivat再次检查我的帖子,我添加了调用deleteSpaces方法的方法以作进一步解释。这是从主执行函数调用的单独类的一部分。浮点值被传递到checkFloat方法,并在其中转换为字符串。@TimBüthe当与2.03 445一起使用时,这仍然会导致2.03。我使用Eclipse编写此程序时,可能会对输出产生一些影响?或者