[英]Converting string with letters and numbers
因此,我有一個聲明為String name = "John 20150.00"
,我想將該名稱分解為另一個變量,並將數字分解為另一個變量,這可能嗎?
我嘗試使用Double.parseDouble(name);
方法,但是當它運行時,它不能正常工作。
我應該使用什么?
您可以使用java.util.Scanner
分解字符串並解析結果
Scanner s = new Scanner(name);
String firstName = s.next();
double number = s.nextDouble();
您還可以利用.hasNextDouble()
之類的方法來測試下一個標記(標記之間的默認分隔符為空格)是否實際上可以解析為雙精度型。 Scanner
類還提供了正則表達式的靈活性,以定義令牌定界符,使其功能非常強大。
首先,您需要分割字符串:
String[] parts = name.split(" ");
在這里,我們在空間上分裂了。
然后我們通過以下方式獲得每個部分:
String firstName = parts[0];
double cash = Double.parseDouble(parts[1]);
那應該工作。
您應該將字符串分為兩部分:字母部分和數字部分。 使用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);
您可以在解析之前使用正則表達式去除非數字字符:
double d = Double.parseDouble(name.replaceAll("[^\\d.]", ""));
提取數字后,可以類似地提取名稱:
name = name.replaceAll("[\\d.]","").trim();
這種使用正則表達式的方法的優點是,數字在字符串中是第一個還是最后一個都不重要-它仍然可以使用。 如果名稱中有空格,例如"Billy Bob 123.45"
,它也可以使用
您可以通過幾種方法實現此目標,而選擇的方法將取決於您的總體要求
例如,只需使用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:我應該指出,我的正則表達式非常基礎,因此可能會有更好的表達式更靈活,結果更整潔……
為什么不呢?
String[] cake = name.split(" ")
String a = cake[0]
double b = Double.parseDouble(cake[1])
首先,您要分隔字符串並加倍
StringTokenizer st = new StringTokenizer(name);
Sting personsName = st.nextToken();
double d = Double.parseDouble(personName);
那就是你需要做的。 該錯誤是因為您試圖將字符串對象轉換為數字,但是它包含的字母不僅是數字。
可能是這樣的:
String name = "John 20150.00";
String[] parts = name.split(" ");
String person = parts[0];
Double value = new Double(parts[1]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.