如何在特定关键词之后从字符串中获取双打?

时间:2014-07-29 06:46:00

标签: 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.nextDouble();
    }

    return prevClose;

7 个答案:

答案 0 :(得分:1)

if(parse.next("stop") == "stop")

以上永远不会给你真实。因此,prevClose始终为0.始终与.equals()equalsIgnoreCase()而不是==操作员进行字符串比较。

您可以执行以下操作

 while(parse.hasNext()) {
      if(parse.next().equalsIgnoreCase("stop"))
      prevClose = parse.nextDouble();
}

答案 1 :(得分:1)

  1. 将字符串与等号进行比较。

  2. 在没有参数的情况下移除此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

答案 2 :(得分:1)

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

基本上,你想要的只是stop之后的所有文字,为此,我们可以使用String#indexOfString#substring的组合

String test = "this is a test test test stop 123 3.5";
test = test.substring(test.indexOf("stop") + "stop".length()).trim();

获得所需的文字后,您只需split " "分隔符上的剩余文字,就可以将所有数字放在数组中......

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

哪些输出......

123
3.5

对于String比较问题,您应该查看How do I compare strings in Java?了解更多详情

答案 3 :(得分:1)

试试这个

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

答案 4 :(得分: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);

答案 5 :(得分:0)

更改为

while(parse.hasNext()) {
    if(parse.next().equals("stop")) {
        prevClose = parse.nextDouble();
    }
}

==equals之间的区别 - 由于String类覆盖equals方法,如果两个String对象包含相同的内容,则返回true,但==仅返回true两个引用指向同一个对象。

此外Scanner#next() - 查找并返回此扫描程序中的下一个完整标记。它不接受参数

答案 6 :(得分:0)

    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

这适用于任何类型的字符串,与&#34;停止&#34;

无关