如何检查double值是否包含特殊字符

时间:2016-03-29 11:12:53

标签: java double

我正在为一个程序编写一个代码,用户输入2到4个数字,最长可达2位小数。然而,在用户输入这些数字之前,他们必须输入英镑符号,例如#12.34。我想知道如何检查输入的双值是否以井号开始,如果用户忘记输入,则重新提示他们再次执行此操作。到目前为止我使用的是String值和' .startsWith()'代码,但我后来发现String值使得程序的其余部分无法编码,所以我想保持它的双倍值。这是我目前的代码,但希望改为双:

String input;
System.out.print("Enter the 4 numbers with a pound key: ");
input = keyboard.next();
while (!input.startsWith("#")) {
 System.out.print("Re-enter the 4 numbers with a pound key: ");
 input = keyboard.next();
}

我想要像前面提到的那样用双倍替换String。

4 个答案:

答案 0 :(得分:3)

double值没有货币符号。您应该检查货币符号,并在解析双重符号之前将其删除。

String input;
System.out.print("Enter the 4 numbers with a pound key: ");
input = keyboard.next();
while (!input.startsWith("£")) {
   System.out.print("Re-enter the 4 numbers with a pound key: ");
   input = keyboard.next();
}
doulble number = Double.parseDouble(input.substring(1));

答案 1 :(得分:3)

String input;
System.out.print("Enter the 4 numbers with a pound key: ");
input = keyboard.next();
while (!input.startsWith("#")) {
 System.out.print("Re-enter the 4 numbers with a pound key: ");
 input = keyboard.next();
}
// if your excution reaches here. then it means the values entered by user is starting from '#'.
String temp = input;
double value = Double.parseDouble(temp.replace("#",""));

对于程序的其余部分,请使用value。我认为编码现在应该可行。

答案 2 :(得分:1)

使用startsWith方法。我不知道你为什么这么说

  

我后来发现String值使得程序的其余部分无法编码

基本上,您需要反复提示,直到用户输入#符号。那么为什么不使用while循环?

System.out.println("Enter a number:");
String s = keyboard.next();
double d = 0.0; // You actually wnat to store the user input in a
                // variable, right?
while (!s.trim().startWith("#")) {
    System.out.println("You did not enter the number in the correct format. Try again.");
    s = keyboard.next();
    try {
        d = Double.parseDouble(s.substring(1));
    } catch (NumberFormatException ex) {
         continue;
    } catch (IndexOutOfBoundsException ex) {
        continue;
    }
}

这是很多代码!

说明:

首先,它会提示用户输入一个数字并将输入存储在s中。这很容易理解。现在来了困难的部分。我们想循环,直到用户输入正确格式的输入。让我们看看那里有什么样的无效输入:

  • 用户未输入#符号
  • 用户未输入数字

第一个由startsWith方法处理。如果输入不以#开头,请再次询问用户。在此之前,首先调用trim来修剪输入中的空格,以便像" #5.90"这样的输入有效。第二部分由这部分处理:

    try {
        d = Double.parseDouble(s.substring(1));
    } catch (NumberFormatException ex) {
         continue;
    } catch (IndexOutOfBoundsException ex) {
        continue;
    }

如果输入格式错误,请再次询问用户。如果用户输入长度小于1的字符串,请再次询问用户。

“但是等等!为什么要调用substring方法?”您询问。如果用户 在前面输入#,然后输入正确的数字格式,您将如何将该字符串转换为double?在这里,我只是通过调用substring来修剪第一个字符。

答案 3 :(得分:1)

你可以尝试这样的东西,删除所有不是数字或点的角色:

public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    String input;
    System.out.println("Input a number: ");
    while (!(input = br.readLine()).equals("quit")) {
        Double parsedDouble;
        if (input.matches("#[0-9]+\\.[0-9]{1,2}")) {
            parsedDouble = Double.parseDouble(input.replaceAll("[^0-9.]+", ""));
            System.out.println("double: " + parsedDouble);
            System.out.println("Input another number: ");
        } else {
            System.out.println("Invalid. Try again. Example: #10.10");
        }
    }
}