所以我有一个声明为String name = "John 20150.00"
的字符串,我希望将名称分解为另一个变量,并将数字分成另一个变量,这可能吗?
我尝试使用Double.parseDouble(name);
方法,但是当它运行时,它无法正常工作。
我应该使用什么?
答案 0 :(得分:3)
您可以使用java.util.Scanner
拆分字符串并解析结果
Scanner s = new Scanner(name);
String firstName = s.next();
double number = s.nextDouble();
您还可以利用.hasNextDouble()
之类的方法来测试下一个标记(标记之间的默认分隔符是否为空格)是否实际上可以解析为double。 Scanner
类还提供了正则表达式的灵活性来定义您的令牌分隔符,使其非常强大。
答案 1 :(得分:2)
首先,您需要拆分字符串:
String[] parts = name.split(" ");
我们在这里分开了。
然后我们通过以下方式获得每个部分:
String firstName = parts[0];
double cash = Double.parseDouble(parts[1]);
这应该有效。
答案 2 :(得分:2)
你应该将字符串分成两部分:字母部分和数字部分。 使用indexOf('')查找分隔名称和字母的空格的索引。 然后使用substring()创建两个字符串,一个用于字母,一个用于数字。 有关详细信息,您可以查看java api,了解如何使用所有这些方法。
一个例子
String str = "Hi 4.5";
int index = str.indexOf(' ');
String letters = str.substring(0, index);
String numbers = str.substring(index + 1);
double numbersDouble = Double.parseDouble(numbers);
System.out.println(numbersDouble);
答案 3 :(得分:2)
您可以在解析之前使用正则表达式删除非数字字符:
double d = Double.parseDouble(name.replaceAll("[^\\d.]", ""));
提取数字后,您可以类似地提取名称:
name = name.replaceAll("[\\d.]","").trim();
这种使用正则表达式的方法的优点是,如果数字在字符串中的第一个或最后一个并不重要 - 它仍然有效。如果名称中有空格,例如"Billy Bob 123.45"
答案 4 :(得分:2)
有几种方法可以达到这个目的,您选择的方法将达到您的总体要求
只需使用String#split
,例如......
String value = "John 20150.00";
String[] parts = value.split(" ");
for (String part : parts) {
System.out.println(part);
}
这允许您在已知令牌(可能是正则表达式本身)上分开String
使用正则表达式...
String regExp = "([A-Za-z]+)|([0-9]+(.[0-9]+))";
Pattern pattern = Pattern.compile(regExp);
Matcher matcher = pattern.matcher(value);
while (matcher.find()) {
System.out.println(matcher.group());
}
这将允许您匹配更复杂的规则集。 Matcher
包含groupCount
和getGroup
方法,因此您可以单独访问这些元素。
这将允许您处理split
令牌可能出现在捕获组中的情况,例如John Walker 20150.00
,您可以使用([A-Za-z]+([ ][A-Za-z]+))|([0-9]+(.[0-9]+))
来捕获Jonh Walker
分别和2015.00
分开。
你不能(轻松)使用split
......你可以,但它会变得更复杂,特别是如果String
包含其他名称和金额,例如......
nb:我应该指出,我的正则表达式非常基本,所以可能有更好的表达式更灵活,结果更好......
答案 5 :(得分:1)
为什么不呢:
String[] cake = name.split(" ")
String a = cake[0]
double b = Double.parseDouble(cake[1])
答案 6 :(得分:0)
首先,您要分隔字符串和双重
StringTokenizer st = new StringTokenizer(name);
Sting personsName = st.nextToken();
double d = Double.parseDouble(personName);
这就是你需要做的。该错误是因为您尝试将字符串对象转换为数字,但它的字母不是数字。
答案 7 :(得分:0)
这样的事情可能是:
String name = "John 20150.00";
String[] parts = name.split(" ");
String person = parts[0];
Double value = new Double(parts[1]);