我应该从以下字符串中提取double值:
r ( 4.5, 1.0 ) 10.5 7 ;
但是我的代码会删除除数字之外的所有内容,而这不是我想要的。 我的代码:
import java.io.File;
import java.util.Scanner;
public class mine {
public static void main(String[] args) throws Exception
{
String str;
String numbers;
Scanner SC=new Scanner(System.in);
System.out.print("Enter string that contains numbers: ");
str=SC.nextLine();
//extracting string
numbers=str.replaceAll("[^0-9]", "");
System.out.println("Numbers are: " + numbers);
}
}
输出我的代码:
Enter string that contains numbers: r ( 4.5, 1.0 ) 10.5 7
Numbers are: 45101057
我想找到一种方法将数字分配给变量。例如,使用以下字符串:r ( 4.5, 1.0 ) 10.5 7
(假设a,b,c,d已经声明)
我想要这个:
a = 4.5
b = 1.0
c = 10.5
d = 7
答案 0 :(得分:1)
如果您想保留浮点数和分隔符,除了十进制数字外,还必须在替换正则表达式中包含点字符和空格:
numbers = str.replaceAll("[^0-9. ]", "");
一旦你有了字符串,就可以使用本Q& A:Convert a string of numbers into an array中讨论的技术来分离各个数字。
答案 1 :(得分:0)
如果你保证你的文件中有四个值,那么以这种方式拥有变量只会很有用。出于灵活性的考虑,最好将其放在列表中。
List<Double> numbers = new ArrayList<>();
// assuming str already has the numbers...
for(String s : str.split(" ") {
numbers.add(Double.parseDouble(s));
}
将这些声明为单个变量使用上述相同方法的99%,只需交换单个值的列表。我把它作为读者的练习。
答案 2 :(得分:0)
试试这个(它使用第二个扫描程序尝试将每个标记解析为Double;如果它不是double,则解析将失败):
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Enter string that contains numbers: ");
String str = sc.nextLine();
Scanner token = new Scanner(str);
while token.hasNext() {
String tokenStr = token.next();
try {
double d = Double.parseDouble(tokenStr);
// YOUR CODE: do something with d here, such as appending
// it to an array, assigning it to a var, or printing it out.
} catch (NumberFormatException e) {
// no op
}
}
}