用字母和数字转换字符串

时间:2014-03-27 21:03:15

标签: java string double

所以我有一个声明为String name = "John 20150.00"的字符串,我希望将名称分解为另一个变量,并将数字分成另一个变量,这可能吗?

我尝试使用Double.parseDouble(name);方法,但是当它运行时,它无法正常工作。

我应该使用什么?

8 个答案:

答案 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包含groupCountgetGroup方法,因此您可以单独访问这些元素。

这将允许您处理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]);