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