Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.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 如何从特定关键字后的字符串中获取双精度?_Java - Fatal编程技术网

Java 如何从特定关键字后的字符串中获取双精度?

Java 如何从特定关键字后的字符串中获取双精度?,java,Java,我尝试了很多方法。这就是我放弃的那个 double prevClose = 0; String test = "this is a test test test stop 123 3.5"; Scanner parse = new Scanner(test); while(parse.hasNext()) { if(parse.next("stop") == "stop") prevClose = parse.nextDo

我尝试了很多方法。这就是我放弃的那个

    double prevClose = 0;

    String test = "this is a test test test stop 123 3.5";
    Scanner parse = new Scanner(test);
    while(parse.hasNext()) {
        if(parse.next("stop") == "stop")
            prevClose = parse.nextDouble();
    }

    return prevClose;
以上永远不会给你真实的感觉。因此
prevClose
将始终为0。始终与
.equals()
equalsIgnoreCase()
进行字符串比较,而不是
=
运算符

您可以执行以下操作

 while(parse.hasNext()) {
      if(parse.next().equalsIgnoreCase("stop"))
      prevClose = parse.nextDouble();
}
  • 将字符串与等号进行比较

  • 删除此
    next(“stop”)
    无参数调用
    next()

    double prevClose = 0;
    
    String test = "this is a test test test stop 123 3.5";
    Scanner parse = new Scanner(test);
    while(parse.hasNext()) {
        if(parse.next().equals("stop"))
            prevClose = parse.nextDouble();
    }
    
    System.out.println(prevClose);
    
    输出:
    123.0


  • 不仅是字符串比较,还有另一个问题

        double prevClose = 0;
        String test = "this is a test test test stop 123 3.5";
        Scanner parse = new Scanner(test);
        while (parse.hasNext()) {
            if ("stop".equals(parse.next())) { // String comparison and next()
                prevClose = parse.nextDouble();
            }
        }
        System.out.println(prevClose);
    

    让我们忽略代码中的
    String==String
    问题,从另一个方向开始

    基本上,您只需要
    stop
    之后的所有文本,为此,我们可以使用
    String#indexOf
    String#substring

    String test = "this is a test test test stop 123 3.5";
    test = test.substring(test.indexOf("stop") + "stop".length()).trim();
    
    一旦你有了想要的文本,你就可以简单地将剩下的文本拆分成一个数组中的所有数字

    String parts[] = test.split(" ");
    for (String part : parts) {
        System.out.println(part);
    }
    
    哪个输出

    123
    3.5
    
    对于
    字符串
    比较问题,您应该查看更多详细信息

    对此进行更改

    while(parse.hasNext()) {
        if(parse.next().equals("stop")) {
            prevClose = parse.nextDouble();
        }
    }
    
    =
    equals
    之间的区别-由于String类重写了
    equals
    方法,因此如果两个String对象包含相同的内容,它将返回true,但只有当两个引用指向同一对象时,
    =
    才会返回true

    此外,
    Scanner#next()
    -查找并返回来自此Scanner的下一个完整标记。它不接受参数

    double prevClose = 0;
    
    String test = "this is a test test test stop 123 3.5";
    String[] split = test.split("stop");
    String rightArray = split[1];
    String[] numbers = rightArray.split(" ");
    for (int i = 1; i < numbers.length; i++) {
        prevClose = Double.parseDouble(numbers[i]);
        System.out.println(prevClose);
    }
    
    输出:

    123.0
    3.5
    

    这适用于与“停止”无关的任何类型的字符串。

    。。再也不会了。。将字符串与
    .equals
    @marounnaroun进行比较Stackoverflow上的我的一天从一个字符串比较问题开始。@sᴜʀᴇsʜᴀᴛᴛᴀ 我的一天就这样结束了。剩下的一天都充满了它…@MadProgrammer不得不在:POkay上向stringcompare.stackoverlow.com提出建议,但是,为什么其他答案还没有解决,这又增加了什么额外的价值…?我的不好,但没有人试图解释
    ==
    equals
    之间的区别,为什么他应该使用
    equals
    在他的案例中,前两个答案解释了问题和解决方案,至少就我所见,我甚至提到了我自己的答案,这完全避免了这个问题……OP实际上面临的是这个问题,而不是比较问题+1。@sᴜʀᴇsʜᴀᴛᴛᴀ 这只是另一种解决问题的方法的一个例子,并不是说它是最好的,只是不同(我个人不喜欢
    扫描仪
    ;)
    123.0
    3.5
    
        double prevClose = 0;
    
        String test = "this is a test test test stop 123 3.5";
       String[] test2 = test.split(" ");
       int i = 0;
        while(test2.length>i) {
            String string = test2[i];
            try {
                prevClose = Double.parseDouble(string);
                System.out.println(prevClose);
            } catch (NumberFormatException e) {
                //System.out.println("this is not number");
                //do nothing
            }
    
            i++;
        }
    
    123.0
    3.5